Запись в несколько файловых дескрипторов одним вызовом функции - PullRequest
2 голосов
/ 10 августа 2010

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

Теперь я подумываю найти лучшее решение проблемы. Можно ли сделать это одним вызовом функции с сервера, используя системный вызов tee в linux. Я хочу, чтобы выходные данные одного тройника также переходили к следующему тройнику и в сокет клиентов. Мне интересно, могу ли я скопировать файловый дескриптор одного конца тройника в сокет клиентов и получить желаемый эффект.

Пожалуйста, предложите любую другую реализацию для известного вам варианта использования.

Спасибо

1 Ответ

2 голосов
/ 10 августа 2010

Системный вызов tee(2) требует, чтобы оба файловых дескриптора были каналами, поэтому сокеты не учитываются.Системные вызовы splice(2) и vmsplice(2) также не соответствуют вашим требованиям, и я также не вижу, как использовать sendfile(2).

Я не сталкивался с таким системным вызовом.Призывает собирать разнородные данные и записывать их все сразу (или наоборот для чтения) - да.Но для записи на несколько выходов одновременно - нет.

Итак, ваш текущий «цикл вокруг дескрипторов» примерно такой же хороший, как и сейчас, AFAICT.

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