我可以在使用sendmsg()之前连接套接字吗?

时间:2009-05-27 01:07:05

标签: sockets

我正在尝试在进程之间传递fd,我找到了像portlisten这样的示例代码。在示例中,recvmsg()可以将绑定套接字作为参数(并将msghdr.msg_name保留为NULL),但sendmsg()不能 - 它必须在msghdr.msg_name中使用sockaddr*

我尝试通过先连接但失败来修改程序,并发现评论为/* doesn't do anything at the moment,但我不明白为什么。

这是sendmsg()的限制,它不能将已连接的套接字作为参数吗?

2 个答案:

答案 0 :(得分:1)

来自sendmsg手册页的

  

sendmsg()函数应通过连接模式或无连接模式套接字发送消息。如果套接字是无连接模式,则消息应发送到msghdr指定的地址。如果套接字是连接模式,则应忽略msghdr中的目标地址。

这意味着如果您使用TCP连接,则会忽略msghdr中的目标地址

答案 1 :(得分:1)

查看libancillary的源代码。我无法发布链接,因为我是新用户,但您可以在Google上找到它。