Проблема CAsyncSocket и ThreadPool - PullRequest
       15

Проблема CAsyncSocket и ThreadPool

0 голосов
/ 18 апреля 2010

У меня есть серверное приложение с такой структурой: Есть один объект, называемый его Сервер, который в бесконечном цикле слушает и принимает соединения. У меня есть потомок класса от CAsyncSocket, который переопределил событие OnReceive, назовите его ProxySocket. Также у меня есть пул потоков с ранее созданными потоками.

Когда объект сервера получает соединение, он принимает новое соединение для нового объекта ProxySocket. Когда данные поступают в ProxySocket, он создает объект команды и передает его в пул потоков. В этом объекте команды я дал дескриптор сокета ProxySocket. Когда создается новый объект команды - я создаю новый сокет в рабочем потоке и прикрепляю к нему дескриптор.
Моя проблема следующая: Когда команда заканчивается, сокет не закрывается, я просто отсоединяю дескриптор и устанавливаю дескриптор CSocket в значение INVALID_SOCKET, как и планировалось. Но мой первый объект ProxySocket не получает сообщения о получении новых данных после этого. Как я могу решить это?

1 Ответ

1 голос
/ 18 апреля 2010

Я не думаю, что вы можете использовать объекты CAsyncSocket (или их потомков) в сценарии пула потоков. CAsyncSockets реализованы поверх WSASsyncSelect - который сообщает winsock отправлять уведомления дескриптору окна. Поскольку окна имеют сходство с потоками, никогда нельзя «переместить» обработку CAsyncSocket в другой поток.

...