我可以使用非阻塞套接字使用“sendmsg / recvmsg”将FD从一个进程发送到另一个进程吗?

时间:2012-06-21 05:04:10

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

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

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

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

您应该使用sendfile在FD和套接字之间传输文件。

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

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