[类似问题]:
Problems using UDP sockets bound to the same port on Windows
Handling multiple UDP sockets listening on the same endpoint
这些问题都没有得到解决。
【情况】:
在MicrosoftWindows上,我在同一个进程中绑定了两个UDP服务器套接字。在此之上,SO_REUSEADDR
的作用类似于SO_REUSEPORT
。
因此,考虑到上述情况,我只剩下将套接字A绑定到0.0.0.0:1234
,将套接字B绑定到192.168.1.1:1234
;如果要在同一台计算机上重复使用同一个端口。
也就是说,我不能将两者绑定到同一个IP地址,因为微软Windows不同意这样做;因为再一次,它不支持两个套接字绑定到{SRC_ADDR,DST_ADDR, SRC_PORT,DST_PORT,PROTOCOL}
的完全相同的元组,即使SO_REUSEADDR
在两个套接字上使用。
因此,如果我在同一台机器上使用同一个端口,我必须绑定到两个不同的地址。即使0.0.0.0
代表任何地址,但在任何情况下Microsoft Windows都同意,并在这样的配置中绑定两个套接字,没有任何错误。
在两个UDP套接字的这种配置中,绑定操作会成功。
问题:
现在,我在让这些套接字按预期接收数据时遇到了麻烦。也就是说,我希望两个套接字都能接收数据。实际上,只有先绑定的套接字才能接收数据。
有什么想法吗?
是不是数据总是由与目的地最匹配的套接字接收?如果你想知道我为什么要这样做,那是因为我试图在同一个端口上用两种协议复用两个库,而修改量最小。
1条答案
按热度按时间ee7vknir1#
如果你想让两个端口接收相同的udp数据包,你应该设置选项/标志广播传输套接字.
在某些情况下(对于某些操作系统),您应该将数据包传输到广播地址,而不是确切的IP地址。