【问题标题】:read() form an unbinded socket?read() 形成一个未绑定的套接字?
【发布时间】:2017-06-25 11:12:12
【问题描述】:

如果从一个未绑定的套接字读取会发生什么?更具体地说是在 UDP 套接字上?

如果套接字已用于发送信息,则套接字将绑定到端口(和地址),因此我们将监听该端口(地址、端口),但如果套接字完全未绑定,则预期的行为是什么? 在这种情况下,该套接字将如何响应 select/epoll 以进行读取操作?

【问题讨论】:

  • 你尝试的时候发生了什么?
  • 好吧,我真的想从规范中弄清楚:D 我要在许多不同的旧平台上运行东西,所以我真的不相信任何实验。
  • 为什么不想绑定呢?

标签: sockets udp posix bind


【解决方案1】:

有不同的指定,也可以不指定。

来自 man 7 udp (Linux):

为了接收数据包,可以先使用 bind(2) 将套接字绑定到本地地址。否则套接字层将自动分配一个超出/proc/sys/net/ipv4/ip_local_port_range 定义范围的空闲本地端口并将套接字绑定到INADDR_ANY。

来自MSDN recv() function

必须知道套接字的本地地址。对于服务器应用程序,使用显式绑定函数或隐式 acceptWSAAccept 函数。不鼓励对客户端应用程序进行显式绑定。对于客户端应用程序,可以使用 connectWSAConnectsendtoWSASendToWSAJoinLeaf 将套接字隐式绑定到本地地址。

WSAEINVAL: 套接字尚未与 bind 绑定,...

我无法回答 BSD、Solaris、HP-UX、AIX、...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2015-07-20
    • 2015-03-01
    • 1970-01-01
    • 2010-10-18
    • 1970-01-01
    相关资源
    最近更新 更多