Надежный способ обнаружения разъединения состоит в том, чтобы встроить сообщение типа null / ping / echo в протокол уровня вашего приложения, и чтобы ваше приложение отправляло его через регулярные интервалы. Если он не получает своевременного ответа, он может предположить, что соединение было разорвано. Большинство протоколов, которые предназначены для использования долгоживущих соединений, включают такое сообщение (например, IRC, IMAP и SSH все делают).
(В конце концов, даже если вы могли бы отправлять сообщения TCP ACK без ответа, другой конец не должен отвечать на них, поскольку он не получил больше данных для самого ACK).