繁体   English   中英

是否总是需要绑定套接字?

[英]Is it always required to bind a socket?

好吧,我的问题可能看起来像一个基本的东西,但我是网络编程方面的新手。 我想知道:

1) 是否总是需要绑定套接字才能从中接收消息? 我看到了一个嗅探器代码(原始套接字),其中直接调用recvfrom和另一段代码,其中调用bind然后接收。

2)AF_*和PF_*家族有什么区别? 后者与POSIX有关吗? 推荐哪个?

不,您不需要 bind()。

如果您正在使用 TCP 或 UDP 套接字,您计划在其中使用 connect() 或使用 sendto() 将数据包发送到目的地,则当您尝试连接或发送时,内核将自动将套接字绑定到合适的端口号. 这通常是首选方式。 bind()ing 客户端套接字被认为是有害的。

AF_UNIX 套接字也是如此 - 客户端不需要绑定,并且通常不应该这样做。

对于只发送数据的客户端,不需要绑定。

对于向服务器发送请求然后接收响应的客户端,绑定不是必需的。 服务器可以使用传入数据来自的 IP 地址和端口号。

对于仅接收数据或在将数据发送回服务器之前正在接收数据的客户端,绑定是必要的。 服务器如何知道将数据发送到哪里? 从这个意义上说,“客户端”就像一个“服务器”,需要一个地方(绑定端口)来接收数据。

我不了解 Linux,但在 Windows 上,如果在未绑定的套接字上调用recvfrom() ,它将WSAEINVAL错误而失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM