我有一个群聊服务器的用例,其中服务器必须将通用字符串写入所有客户端的套接字。然后我通过遍历文件描述符列表并将字符串写入每个文件描述符来解决这个问题。
现在我正在考虑寻找更好的解决方案。是否可以通过在 linux 中使用 tee 系统调用从服务器调用单个函数来完成此操作。我希望一个发球台的输出到下一个发球台以及客户端套接字。我想知道是否可以将 T 恤一端的文件描述符复制到客户端套接字并获得所需的效果。
请建议您所知道的用例的任何其他实现方式。
谢谢
最佳答案
tee(2)
系统调用要求两个文件描述符都是管道 - 所以套接字不算数。 splice(2)
和 vmsplice(2)
系统调用似乎也不符合您的要求,我不知道如何利用 sendfile(2)
要么。
我还没有遇到过这样的系统调用。要求收集不同的数据并一次写入所有数据(或相反的阅读方式)- 是的。但是对于一次写入多个输出 - 不。
所以,AFAICT,您当前的“围绕描述符循环”已经差不多了。
关于c - 使用单个函数调用写入多个文件描述符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3445566/