Если коротко - суть протокола TCP (одна из) - в том, чтобы скрывать проблемы соединения от вышестоящего уровня (утрирую несколько, конечно). Соответственно, о том, что проблема с соединением есть, можно узнать далеко не сразу. А если у клиента и сервера разные настройки по таймауту соединения, один из них может думать что соединение разорвано, а другой - ещё пытаться дождаться отправки запроса или результата его выполнения.