I had a similar problem once when I sought for a communication interface that could be connected or not. To my astonishment I found out that in the specs for I2C there is nothing like a timeout or a defined failure. The only workaround so far I could evaluate was that one (1) living slave seems to hinder the I2C from stalling. Testing the connection could be made with I2Cm_SendStart() which will return a value != 0 when the connection to the slave is broken. I did not find a way to capture a broken connection within a transaction.