Сокет send () фактически выполняет операцию копирования ваших данных в исходящий буфер стека сети. Если копирование выполнено успешно (т. Е. Достаточно места для приема ваших данных), ошибка не генерируется. Это не означает, что другая сторона получила это или даже что данные вышли на провод.
Любой тайм-аут отправки начинает отсчет, когда буфер заполнен , указывая, что другая сторона получение данных медленнее, чем вы их отправляете (или, в крайнем случае, не получаете вообще ничего, потому что кабель сломан, или он был отключен или разбился без надлежащего закрытия своего гнезда). Если полный буфер сохраняется в течение секунд ожидания, вы получите сообщение об ошибке.
Другими словами, нет способа обнаружить резкую ошибку сокета (например, плохой кабель, отключение питания или отказ однорангового узла), другое чем переполнение исходящего буфера для срабатывания тайм-аута.
Обратите внимание, что в случае плавного завершения работы однорангового сокета ваш сокет будет знать об этом и выдать вам ошибки , если вы попытаетесь отправить или получить после того, как условие было получено в вашем сокете , что может занять много микросекунд после завершения операции. Опять же, в этом случае вы должны вызвать ошибку (путем отправки или получения), это не происходит само по себе.