Сокет fd в многопоточности - PullRequest
1 голос
/ 11 июня 2010

Можно ли использовать один и тот же сокет fd в нескольких потоках? (поверх linux)

Ответы [ 2 ]

3 голосов
/ 11 июня 2010

Это зависит от того, что вы ожидаете, но да, вы можете. Если вы читаете UDP-пакеты, каждый из которых является полным сообщением, это может хорошо работать. Если вы читаете потоки данных из TCP, это, вероятно, не будет работать хорошо.

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

1 голос
/ 11 июня 2010

Вы столкнетесь с проблемами параллелизма при попытке отправить () или recv () (SOCK_STREAM) из нескольких потоков.Вы должны использовать критическую секцию или некоторые другие средства создания последовательного доступа для send () и recv ().

Одна стандартная вещь, которую нужно сделать с потоками - это иметь master listen () & accept (), затемпередать сокет клиентскому потоку, который отправляет / получает / обрабатывает этот сокет.Клиентский поток отвечает за вызов close () или shutdown ().

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