簡體   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