-
Уважаемые Мастера, у меня такой вопрос:
С помощью WSA создаются несколько сокетов. Обработку от одного сокета я назначаю с помощью WSAAsyncSelect.
А есть ли способ обрабатывать информацию с помощью ОДНОЙ функции от ВСЕХ сокетов?
Спасибо.
-
Есть.
Для каждого из созданных тобой гнезд вызови WSAAsyncSelect, указав хэндл одного и того же окна, тогда все сообщения об интересующих событиях этих гнезд будут адресованы указанному окну.
-
2 Сергей М.:
Я так и сделал сразу - не работает. Реагирует функция только на последний сокет.
-
> не работает
А у меня работает.
Мало того, и у ребят из Борланда, разработавших стандартные компоненты TServer/ClientSocket тоже работает. Чудеса да и только)
Что я делаю не так ?)
-
2 Сергей М.:
Издеваетесь :-)
Сейчас просмотрю свой код по буковкам, т.к. я тоже думаю, что работать должно.
-
> Новичек © (10.03.08 21:01) [4]
Почему издеваюсь-то ?
На самом же деле работает !
-
2 Сергей М.:
Нашел - я переменной WorkedSocket присваивал дескрипторы всех вновь создаваемых сокетов:
WorkedSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
Соответственно, в конце оставался только один дескриптор.
Спасибо за поддержку, Сергей.
-
> Новичек © (10.03.08 21:11) [6]
Да не за что)
-
> Новичек © (10.03.08 20:35)
я, кстати, как то пробовал сравнить два варианта: в первом создавал 1000 окон по одному для каждого сокета, а во втором одно окно на 1000 сокетов. Разницы ощутимой я не увидел. Сильно много ресурсов первый вариант тоже не сожрал. Хотя кажется на первый взгляд, что 1000 окон - это чудовищно много.
-
To DVM:
Вы абсолютно правы - я проделывал такой экспкримент, получил те же самые результаты.
И еще: запихивал создание и обработку событий от сокетов в отдельные процессы. Результат - жрет память немеряно :-)
-
> запихивал создание и обработку событий от сокетов в отдельные
> процессы
Это как ?
-
> Сергей М. © (12.03.08 19:57) [10]
у него под Unix наверное :) там у демонов как раз процесс клонируется.