Запись в несколько файловых дескрипторов одним вызовом функции

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

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

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

Спасибо

1 ответ

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

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

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

Другие вопросы по тегам