所以我创建了一个带套接字的套接字(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)与端口不会做任何事情,对吧?我做了它,套接字仍然接收到各种其他端口的消息。
答案 0 :(得分:0)
不。原始套接字将所有数据包传递给所有已注册的套接字用户,因此一旦进入系统,您将获得数据包的副本,但UDP套接字也会收到它。
对于第二个问题......你没有bind(2)
一个原始套接字,所以你不能将它与一个端口号相关联。