我有一个群聊服务器的用例,服务器必须向所有客户端的套接字写入一个公共字符串。然后我通过遍历文件描述符列表并将字符串写入每个文件描述符来解决这个问题。
现在我正在考虑找到更好的解决方案。是否可以通过在 linux 中使用 tee 系统调用从服务器调用单个函数来执行此操作。我希望一个 tee 的输出也可以到下一个 tee 以及客户端套接字。我想知道是否可以将 tee 一端的文件描述符复制到客户端套接字并获得所需的效果。
请为您知道的用例建议任何其他实现。
谢谢
我有一个群聊服务器的用例,服务器必须向所有客户端的套接字写入一个公共字符串。然后我通过遍历文件描述符列表并将字符串写入每个文件描述符来解决这个问题。
现在我正在考虑找到更好的解决方案。是否可以通过在 linux 中使用 tee 系统调用从服务器调用单个函数来执行此操作。我希望一个 tee 的输出也可以到下一个 tee 以及客户端套接字。我想知道是否可以将 tee 一端的文件描述符复制到客户端套接字并获得所需的效果。
请为您知道的用例建议任何其他实现。
谢谢
系统tee(2)
调用要求两个文件描述符都是管道 - 所以套接字不计算在内。和系统调用似乎也不符合您的要求,我也不知道如何splice(2)
使用。vmsplice(2)
sendfile(2)
我没有遇到过这样的系统调用。要求收集不同的数据并一次全部写入(或相反的读取)——是的。但是对于一次写入多个输出 - 不。
因此,AFAICT,您当前的“围绕描述符的循环”几乎是最好的。