Запись в несколько файловых дескрипторов одним вызовом функции
У меня был сценарий использования сервера группового чата, где серверу приходилось записывать общую строку в сокет всех клиентов. Затем я обратился к этому, просматривая список файловых дескрипторов и записывая строку в каждый из файловых дескрипторов.
Сейчас я подумываю найти лучшее решение проблемы. Можно ли сделать это одним вызовом функции с сервера, используя системный вызов tee в linux. Я хочу, чтобы выходные данные одного тройника также переходили к следующему тройнику и в сокет клиентов. Мне интересно, могу ли я скопировать файловый дескриптор одного конца тройника в сокет клиентов и получить желаемый эффект.
Пожалуйста, предложите любую другую реализацию для варианта использования, о котором вы знаете.
Спасибо
1 ответ
tee(2)
Системный вызов требует, чтобы оба файловых дескриптора были каналами, поэтому сокеты не учитываются. splice(2)
а также vmsplice(2)
системные вызовы также не соответствуют вашим требованиям, и я не вижу, как их использовать sendfile(2)
или.
Я не сталкивался с таким системным вызовом. Призывает собирать разнородные данные и записывать их все сразу (или наоборот для чтения) - да. Но для записи на несколько выходов одновременно - нет.
Итак, ваш текущий "цикл вокруг дескрипторов" примерно такой же хороший, как и сейчас, AFAICT.