Я знаю, WSASocket
и closesocket
довольно дорогие для вызова, и я знаю, DisconnectEx
, вызываемый с флагом TF_REUSE_SOCKET
, позволяет отключить сокет, который может быть снова передан AcceptEx
.
Хотя это должно работать на Windows 8.1 и выше, я сейчас развиваюсь до Windows 7 , и, если я хорошо помню, DisconnectEx
возвращает ошибку, если она вызывается с флагом TF_REUSE_SOCKET
, или если это не приводит к какой-либо ошибке, вызов AcceptEx
с этим сокетом обязательно вызовет некоторую ошибку.
Официальная документация гласит, что TF_REUSE_SOCKET
следует использовать под Windows 8.1 или новее, поэтому меня это не удивляет.
Есть ли другой способ повторно использовать сокет?
Например, сбросить его с помощью метода, или каким-то образом очистить его внутренние структуры, или есть какой-нибудь "хак", чтобы просто перевернуть флаг или очистить переменную в этом "экземпляре" сокета, чтобы он мог принять новое соединение?
Может быть, если я смогу получить какой-то адрес памяти базовой структуры (WSSOCKET
), что мне в нем перезаписать, чтобы сделать его многоразовым, если это вообще возможно?