2012-04-22 2 views
1

Просто быстрый вопрос. У меня есть приложение сети C (TCP-сервер), у которого есть несколько рабочих потоков (Pthreads). Каждый рабочий поток использует системный вызов select, и каждый поток имеет прослушивание socket descriptor, добавленное к его выбору. Таким образом, каждый рабочий поток прослушивает входящие соединения, и только один поток за один раз успевает принять конкретное соединение и что соединения добавлено в набор select соответствующего потока.Обмен дескриптором сокета между несколькими потоками

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

ответ

3

Вы можете делиться сокетами и файловыми дескрипторами между различными потоками. Это то, что делают большинство серверов.

+0

Извините за двойную проверку:/Это означает, что если поток принимает соединение, а дескриптор возвращаемого файла добавляется в другие потоки, выберите, все они смогут записывать/читать из этого дескриптора правильно? – Abdullah

+0

AFAIK, да, не должно быть никакого различия в том, какой поток был создан/принят FD. – MByD

+0

Спасибо большое. очень ценится :) – Abdullah

Смежные вопросы