Я хотел бы сделать TCP-клиент, который делает несколько соединений, в то время как цикл select(), который принимает данные от них, работает в отдельном потоке. Я не уверен, что это возможно, потому что цикл select() уже запущен и, следовательно, я не вижу, как он «заметит» новый сокет, добавленный, даже если будут рассмотрены проблемы безопасности потоков.Можно выбрать() для клиентов, а не только для серверов?
Есть ли способ сделать это, или я должен создать новый поток и использовать recv() каждый раз, когда я создаю новое соединение?
(под редакцией для ясности.)
Хорошо спасибо, поэтому, хотя функция select() работает в цикле, и сокет добавляется из совершенно другого потока, где используется функция connect(), он все равно заметит, что набор для чтения только что получил новое дополнение и будет начать получать данные по нему? Это немного противоречиво, но я попробую. – 2009-11-05 16:03:28
А? Потоки? Я думал, вы сказали «единственная нить» в вопросе. Измените свой вопрос, чтобы более четко описать, как использовать потоки. FD_SET (очень вероятно) не является потокобезопасным, поэтому вам нужно позаботиться о добавлении сокетов в общий набор из многих потоков. – unwind
Извините, я предположил, что это было ясно, потому что select() должен запускаться в цикле, поэтому, если я не сделаю все мои подключения до того, как попасть в цикл, я как бы вынужден сделать свои подключения в отдельном потоке. – 2009-11-05 16:29:05