繁体   English   中英

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

[英]Can I use non-blocking sockets to send FDs from one process to another using “sendmsg/recvmsg”?

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM