read()形成一个未绑定的套接字?

时间:2017-06-24 22:44:54

标签: sockets udp posix bind

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

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

1 个答案:

答案 0 :(得分:2)

它有多种指定或未指定。

来自 man 7 udp (Linux):

  

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

来自MSDN recv() function

  

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

  

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

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