Проблема заключается в базовом протоколе TCP.
Когда соединение неожиданно умирает, TCP не будет немедленно информировать другую сторону.
Обычно есть тайм-ауты в диапазоне часов, которые вы можете в конечном итоге настроить в используемом стеке TCP - в вашем случае где-то в реестре Windows. Но я бы не советовал, потому что это влияет на всю вашу машину.
Но вы получите сообщение об ошибке при попытке отправить данные по этому несуществующему соединению в следующий раз.
Так что, если вы хотите знать, живо ли ваше соединение или нет, вы должны отправлять небольшое сообщение через регулярные промежутки времени.