tcp closesocket метод сброса генерации winsock (RST)

Функция закрытия сокета Windows (closesocket) генерирует RST.

В Linux, когда я вызываю функцию close для закрытия tcp-сокета, он проходит через fin / ack с обоих клиентских серверов, и сокет закрывается.

Но на Windows Winsock, когда я вызываю closesocket, он всегда генерирует сообщение RST.

Я попытался с помощью вызова выключения. Это порождает FIN. Но, наконец, я должен вызвать closesocket, и он отправляет RST.

Есть ли способ вызвать closesocket для освобождения ресурсов сокета без отправки сообщения RST.

1 ответ

Есть несколько вещей, которые могут вызвать closesocket() отправить RST вместо FIN:

  1. Вызывается, когда в буфере приема сокета ожидают непрочитанные данные.
  2. Вызывая его после того, как вы установили опцию SO_LINGER в "on" с нулевым тайм-аутом.

Если больше нет данных для отправки и / или получения, вы можете использовать "shutdown()".

Пример: выключение (clisocket, SD_BOTH);

Другие вопросы по тегам