LINUX.ORG.RU

История изменений

Исправление Legioner, (текущая версия) :

Как корректно выполнить отключение от сервера, чтобы сервер (перед первым вызовом write_some) «знал», что соединение закрыто?

Можно попробовать прочитать из сокета. Если клиент успешно закрыл соединение (обрати внимание на «успешно», если у него уборщица выдернула сетевой кабель, это не «успешно»), то ты прочитаешь 0 байтов (т.е. конец файла, или как там в бусте это показано). Если твой протокол подразумевает, что после закрытие соединения со стороны клиента запись в него не положена, ты по этому факту просто закрываешь соединение со своей стороны (со стороны сервера) и всё.

Тогда предыдущий вопрос открыт: кто знает, подскажите пожалуйста, как средствами boost asio отправить пакет с флагом RST?

RST это принудительное закрытие соединения. По идее оно не должно использоваться при нормальном функционировании.

Исходная версия Legioner, :

Как корректно выполнить отключение от сервера, чтобы сервер (перед первым вызовом write_some) «знал», что соединение закрыто?

Можно попробовать прочитать из сокета. Если клиент успешно закрыл соединение (обрати внимание на «успешно», если у него уборщица выдернула сетевой кабель, это не «успешно»), то ты прочитаешь 0 байтов (т.е. конец файла, или как там в бусте это показано). Если твой протокол подразумевает, что после закрытие соединения со стороны клиента запись в него не положена, ты по этому факту просто закрываешь соединение со своей стороны (со стороны сервера) и всё.