In order for AsyncSocket to get notification of a disconnect it needs to have an outstanding read. [socket readDataWithTimeout:-1 tag:0] is only good for 1 read. To have an outstanding read put [socket readDataWithTimeout:-1 tag:0] -didWriteData delegate. When remote disconnects a message is sent through the asynchSocket delegate -willDisconnectWithError. At which point the appropriate code can be used here to deal with disconnect.