所以我用socket(AF_INET,SOCK_RAW,IPPROTO_UDP)创建了一个套接字。然后我让它有一个无限循环的recv()。我知道它可以捕获所有的数据报。但是它会阻止数据报到达正确的位置吗?我做了个小实验。我从一个程序向另一个程序发送非常简单的UDP消息。他们都收到了这条消息。我假设原始套接字不会阻塞任何UDP消息。然后我在the second paragraph of this question's best answer上读到了这件事。它说未绑定的udp套接字会使系统混乱。因此,我不确定这是否与原始套接字相同。或者在linux和windows上是不同的?
另一个快速问题:将套接字(AF_INET、SOCK_RAW、IPPROTO_UDP)与端口绑定不会做任何事情,对吗?我这样做了,套接字仍然会收到发往所有其他端口的消息。
发布于 2016-08-19 17:00:30
不。原始套接字将所有数据包传递给所有已注册的套接字用户,因此一旦数据包进入系统,您就会得到它的副本,但UDP套接字也会接收它。
关于第二个问题...您不能对原始套接字执行bind(2)操作,因此不能将其与端口号相关联。
https://stackoverflow.com/questions/39031824
复制相似问题