Проблема с запросом подключения к сокету - PullRequest
1 голос
/ 31 марта 2011

Я инкапсулирую связь с сокетом в exe activex.

Этот объект сокета создается из клиентского приложения и будет предоставлять клиенту уведомление о событии.

Когда возникает событие ConnectionRequest, соединение устанавливаетсяпринят, и клиент будет уведомлен через событие CONNECTED (определено в объекте сокета).Все работает до этого момента, но ConnectionRequest снова вызывается с тем же RequestId после того, как предыдущее соединение было принято с помощью метода Accept.

Когда я пытаюсь закрыть сокет и повторно получить запрос, генерируется ошибка времени выполненияговоря "Ошибка выполнения 10038, дескриптор не является сокетом"!

Кто-нибудь сталкивался с этой проблемой? Пожалуйста, предложите какой-нибудь обходной путь.

Заранее спасибо.

PS: Я использую протокол TCP.

1 Ответ

0 голосов
/ 31 марта 2011

Я уверен, что значение requestID является дескриптором сокета для сокета в состоянии listening , поэтому имеет смысл, что оно не меняется, когда у вас есть только один слушатель (которыйобщие).

Они относительны к процессам, поэтому вы не можете осмысленно передавать их между процессами.Для этого вам, вероятно, придется вызвать функцию WSADuplicateSocket () .Я никогда не пробовал этого, поэтому вы можете попробовать поэкспериментировать - но я полагаю, что когда обработчик ConnectionRequest завершает работу, не принимая запрос, элемент управления Winsock отправляет отказ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...