Можно ли повторно использовать сокет winsock под Windows 7? - PullRequest
0 голосов
/ 06 мая 2019

Я знаю, WSASocket и closesocket довольно дорогие для вызова, и я знаю, DisconnectEx, вызываемый с флагом TF_REUSE_SOCKET, позволяет отключить сокет, который может быть снова передан AcceptEx.

Хотя это должно работать на Windows 8.1 и выше, я сейчас развиваюсь до Windows 7 , и, если я хорошо помню, DisconnectEx возвращает ошибку, если она вызывается с флагом TF_REUSE_SOCKET, или если это не приводит к какой-либо ошибке, вызов AcceptEx с этим сокетом обязательно вызовет некоторую ошибку.

Официальная документация гласит, что TF_REUSE_SOCKET следует использовать под Windows 8.1 или новее, поэтому меня это не удивляет.

Есть ли другой способ повторно использовать сокет?

Например, сбросить его с помощью метода, или каким-то образом очистить его внутренние структуры, или есть какой-нибудь "хак", чтобы просто перевернуть флаг или очистить переменную в этом "экземпляре" сокета, чтобы он мог принять новое соединение?

Может быть, если я смогу получить какой-то адрес памяти базовой структуры (WSSOCKET), что мне в нем перезаписать, чтобы сделать его многоразовым, если это вообще возможно?

...