Я написал приложение, которое отправляет информацию через сокет, используя соединение TCP. По нескольким причинам я использую блокировку вызовов, но я заметил, что boost::asio::write()
Метод не блокируется, когда другая машина (принимающая данные) отключается. Это также не вызывает ошибку.
Это ожидаемое поведение?
Запись в сокет блокируется, когда в буфере нет места, иначе она вернется, как только данные будут в буфере для отправки, а не до тех пор, пока данные не будут доставлены получателю. Также сетевой стек может не обнаружить, что другая сторона отключена немедленно, поэтому вы можете видеть или не видеть код ошибки при записи. Так что да, это ожидаемое поведение.
Других решений пока нет …