我需要创建一个通过 Unix 套接字连接的客户端-服务器模型。我的客户端将请求服务器打开一个只有服务器具有权限的文件。服务器将打开文件并使用“sendmsg”API 发送 FD,客户端将使用“recvmsg”接收 FD。现在我的问题是我可以使用非阻塞套接字来实现这一点吗?另外,如果可能的话,我怎么知道客户端消息的长度?
请指出一些相同的非阻塞实现。
我需要创建一个通过 Unix 套接字连接的客户端-服务器模型。我的客户端将请求服务器打开一个只有服务器具有权限的文件。服务器将打开文件并使用“sendmsg”API 发送 FD,客户端将使用“recvmsg”接收 FD。现在我的问题是我可以使用非阻塞套接字来实现这一点吗?另外,如果可能的话,我怎么知道客户端消息的长度?
请指出一些相同的非阻塞实现。
您应该使用sendfile在 FD 和套接字之间传输文件。
如果套接字是非阻塞的,则 sendfile(或 send 或 sendmsg)调用可能会返回一个值,指示已完成的部分数量。使用 select() 或 poll() 来获取何时可以再次发送的通知(从文件描述符中的前一个点开始,当前一个发送停止时)。
至于文件长度,您必须自己将其添加到您的请求/响应协议中。(例如在服务器上调用 stat(),发送文件长度,然后发送文件本身)。
相关: http: //lists.canonical.org/pipermail/kragen-hacks/2002-January/000292.html所以我的回答不完整。