2009-05-27 39 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

相关问题