我正在尝试在进程之间传递fd,我找到了像portlisten这样的示例代码。在示例中,recvmsg()
可以将绑定套接字作为参数(并将msghdr.msg_name保留为NULL),但sendmsg()
不能 - 它必须在msghdr.msg_name中使用sockaddr*
。
我尝试通过先连接但失败来修改程序,并发现评论为/* doesn't do anything at the moment
,但我不明白为什么。
这是sendmsg()的限制,它不能将已连接的套接字作为参数吗?
答案 0 :(得分:1)
:
sendmsg()函数应通过连接模式或无连接模式套接字发送消息。如果套接字是无连接模式,则消息应发送到msghdr指定的地址。如果套接字是连接模式,则应忽略msghdr中的目标地址。
这意味着如果您使用TCP连接,则会忽略msghdr中的目标地址。
答案 1 :(得分:1)
查看libancillary的源代码。我无法发布链接,因为我是新用户,但您可以在Google上找到它。