Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Потоки ввода/вывода select


Автор: SuperYES 4.2.2008, 18:56
Такой вопрос: Какие I/O потоки кроме сокетов можно использовать в функции select?

Проблема следующая (лаконичней не вышло): 

У меня есть сервер многопоточный, в каждом потоке стоит select.
Если например количество клиентов подключенных к выбранному потоку меньше 20например, то в список select добавляю listen socket, т.е. если поток не до конца забит клиентами то он может принимать еще клиентов. 
Если добавляется 20й клиент то убираю из селекта listen socket и создаю новый поток пустой в селекте которого установлен только listen socket. 
Если кто-то из забитого потока отключается, то ему сразу в select добавляется listen socket.

В результате происходит следующее, почти всегда listen сокет указан в нескольких потоках т.к. постоянно кто-то подключается, кто-то отключается и при получении accept запроса все потоки где в селекте есть listen socket активируются.
Хоть там кусок кода и синхронизирован т.е. только один из потоков подключит нового клиента, но происходит много лишних действий программы.

Дальше почесав корку я сделал отдельный поток для listen сокета и хотел заменить во вех селектах Listen  socket на какой-нить локальный I/O stream для каждого потока, тут и застрял.

В итоге должно быть так: при приеме сообщения accept не активируются все потоки, а активируется один поток, из списка не забитых потоков. А активировался бы он передачей в I/O stream чего-нибудь.

Вопрос как делать свои потоки не привязанные к сокетам, что-то типа отображаемых файлов в память, и главное чтоб эти потоки были понятны функции select?

Отпешите кто-что знает.

Автор: SuperYES 5.2.2008, 04:19
Я немного покапался и нашел функцию pselect, которая дополнительно принимает список сигналов.
Вопрос знатокам C++, как ее использовать? Есть ли аналогия этой функции для windows?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)