Межпотоковая связь с сокетами без методов блокировки - PullRequest
0 голосов
/ 10 февраля 2011

Я успешно запустил количество потоков, которые я хочу запустить для моей программы тестирования векторных часов. Следующей проблемой, похоже, является межпотоковая связь; Конфигурационные файлы, которые читают потоки, имеют список комбинаций IP-адресов (localhost) и портов, и каждый из них должен начать прослушивание данного порта и одновременно прочитать входной файл, который сообщает им либо увеличить свои логические часы. или отправьте сообщение другой определенной теме.

Если я сначала создаю ServerSockets для каждого потока, метод accept (), по-видимому, будет блокироваться до тех пор, пока кто-то не попытается подключиться к этому определенному потоку через сокет, и при этом этот поток не сможет выполнить другие действия, которые могли быть заданы во входном файле. (в котором есть только строки в формате («int sendMessageTo int» или «int incrementClock k» - целые числа представляют строки в файле конфигурации, который содержит список хостов и портов). Есть ли способ избежать этого?

1 Ответ

0 голосов
/ 10 февраля 2011

В Linux вы можете использовать accept4 вместо accept и передавать SOCK_NONBLOCK в качестве параметра flags.

В системе, соответствующей POSIX.1-2001, SVr4, 4.4BSD, вы можете установитьO_NONBLOCK с использованием fcntl.

...