2009-05-27 43 views
0

我試圖在過程之間傳遞fd,並且發現示例代碼如portlisten。在示例中,recvmsg()可以將綁定的套接字作爲參數(並將msghdr.msg_name保留爲NULL),但sendmsg()不能 - 它必須在msghdr.msg_name中使用sockaddr*使用sendmsg()之前可以連接套接字嗎?

我試圖通過先連接但失敗來修改程序,並發現評論爲/* doesn't do anything at the moment,但我不明白爲什麼。

這是sendmsg()的限制,它不能把一個已經連接的socket作爲參數嗎?

回答

1

看看libancillary的源代碼。我無法發佈鏈接,因爲我是新用戶,但您可以在Google上找到它。

+0

,看起來不錯! – Francis 2009-05-27 06:07:09

1

從SENDMSG手冊頁:

的SENDMSG()函數應通過連接模式或無連接模式的套接字發送消息。如果套接字是無連接模式,則消息應發送到msghdr指定的地址。如果套接字是連接模式,則msghdr中的目標地址應被忽略。

因此,這意味着,如果你使用一個TCP連接,指向msghdr的目的地址被忽略

+0

那麼UNIX域套接字呢?我可以在連接模式下使用它們嗎? – Francis 2009-05-27 06:06:52

相關問題