【问题标题】:Can I use non-blocking sockets to send FDs from one process to another using "sendmsg/recvmsg"?我可以使用非阻塞套接字使用“sendmsg/recvmsg”将 FD 从一个进程发送到另一个进程吗?
【发布时间】:2012-06-21 05:04:09
【问题描述】:

我需要创建一个通过 Unix 套接字连接的客户端-服务器模型。我的客户端将请求服务器打开一个只有服务器具有权限的文件。服务器将打开文件并使用“sendmsg”API 发送 FD,客户端将使用“recvmsg”接收 FD。现在我的问题是我可以使用非阻塞套接字来实现这一点吗? 另外,如果可能的话,我怎么知道客户端消息的长度?

请指出一些相同的非阻塞实现。

【问题讨论】:

标签: c++ linux sockets ipc file-descriptor


【解决方案1】:

【讨论】:

    【解决方案2】:

    你应该使用sendfile在FD和socket之间传输文件。

    如果套接字是非阻塞的,则 sendfile(或 send 或 sendmsg)调用可能会返回一个值,指示已完成的部分数量。使用 select() 或 poll() 来获得何时可以再次发送的通知(从文件描述符中的上一个点开始,当上一次发送停止时)。

    至于文件长度,您必须自己将其添加到您的请求/响应协议中。 (例如,在服务器上调用 stat(),发送文件长度,然后发送文件本身)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-12
      • 2011-07-21
      • 1970-01-01
      • 2023-03-03
      相关资源
      最近更新 更多