【问题标题】:Can I connect socket before using sendmsg()?我可以在使用 sendmsg() 之前连接套接字吗?
【发布时间】:2009-05-27 01:07:05
【问题描述】:

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

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

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

【问题讨论】:

    标签: sockets


    【解决方案1】:

    来自 sendmsg 手册页:

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

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

    【讨论】:

    • 那么 UNIX 域套接字呢?我可以在连接模式下使用它们吗?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-02-13
      • 2017-02-25
      • 2016-05-08
      • 2010-10-14
      • 2017-08-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-03
      • 1970-01-01
      相关资源
      最近更新 更多