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

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

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

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

Solutions Collecting From Web of "是否总是需要绑定一个套接字?"

不,你不需要绑定()。

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

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

我不知道Linux,但在Windows上,如果在未绑定的套接字上调用recvfrom() ,它将失败并出现WSAEINVAL错误。