【问题标题】:Use write() system call to send a UDP broadcast使用 write() 系统调用发送 UDP 广播
【发布时间】:2014-06-23 09:07:46
【问题描述】:

我正在 Linux 平台上进行一些编程。

我想进行 UDP 广播。

我设置了套接字选项SO_BROADCAST,当我调用sendto() 系统调用时,它完美地发送了广播,但是当我使用bind() 将套接字描述符与目标地址绑定并调用write() 系统时调用,它会引发错误消息:

Destination address required

请给我一些建议,谢谢!

【问题讨论】:

  • bind() 用于设置来源,即绑定到您希望将数据发送出去的本地接口。 bind() 不用于定义目标地址。
  • 无论如何使用sendto()有什么问题?

标签: linux sockets udp broadcast


【解决方案1】:

bind() 不设置目标地址,它设置本地(源)地址。

你需要使用connect()来建立目标地址。

UDP 当然是无连接的,但是调用 connect() 将允许您将套接字与远程地址相关联 - 这允许您在套接字上使用 write() 和 send()。但是,套接字随后也将只接受来自您在 connect() 中指定的地址的传入消息 - 这对于广播流量来说可能是不希望的,因为不应该有消息来自 广播地址。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    • 2019-06-17
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多