Является ли хорошей идеей реализовать клиент-сервер сокета TCP / IP с сигналами? - PullRequest
1 голос
/ 08 ноября 2011

Чтобы пояснить, мне интересно, каковы плюсы и минусы написания «нескольких одновременных клиентов на одном сервере» с использованием сокетов TCP / IP и обработчиков сигналов, которые вызываются в ответ на условия сигнала «можно читать / писать»на дескрипторах файла сокета клиента?Насколько я понимаю, по крайней мере ядро ​​Linux использует сигналы, чтобы уведомить процесс об условиях, связанных с дескрипторами сокетов?Очевидно, что нужно быть осторожным в обработчике сигналов, который, как я понимаю, прерывает процесс - повторный вход, атомарность, неопределенное состояние для переменных и т. Д.

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

1 Ответ

2 голосов
/ 08 ноября 2011

Уже есть пара таких способов. Один из них использует сигнал SIGIO, проверьте man 7 socket и поищите дополнительную информацию в разделе «Сигналы».

Другой метод стандартизирован POSIX и называется асинхронным вводом-выводом. Все используемые функции имеют префикс aio_ (например, aio_read). См. эту ссылку для примера того, как использовать это или проверьте страницу руководства .

...