我面对一个奇怪的行为。
该手册声称 :“当两个套接字绑定到相同的端口号,但在不同的显式接口上时,没有冲突”。 为什么系统在步骤3的下列情况下失败? 这是在操作系统中的错误? (我的微软论坛上的post没有答案)有没有一些解决方法呢?
步骤1.过程A绑定127.0.1.1:88(默认) – 确定
步骤2.过程B绑定127.0.0.1:88(与SO_REUSEADDR) – 确定
第3步。进程C绑定127.0.0.1:88(与SO_REUSEADDR) – 失败(10013 WSAEACCES)
注意:tcp端口是相同的, 接口是不同的和明确的(在步骤1和2-3之间)。 用户是一样的。
Windows Vista(32位),Windows Server 2008(32位),Window Server 2008 R2(64位)等发生此问题。
getsockopt从setsockopt中设置的返回值中返回不同的IP_TOS值
VB.net服务编程和使用TCP套接字
UDP服务器给分段错误
绑定到127.0.0.2
字节分配
在Windows XP中可以:步骤3成功。
更新 :仅供参考,同样的问题: Windows 7的套接字行为与XP有所不同,重复使用地址套接字选项(WSAEACCES 10013错误)
获取具有到给定主机路由的接口的IP地址
通过套接字发送NULL数据
绑定与SO_BINDTODEVICE套接字
使用node.js连接到已经build立的UNIX套接字?
ad hocnetworking中的UDP套接字(Ubuntu 9.10)
当两个套接字使用SO_REUSEADDR时,将两个套接字绑定到相同的显式接口和端口可以保证成功,即使是Microsoft文档也是这样说的。 它必须是代码中的一个bug,要么是在调用bind()之前在两个套接字上都不启用SO_REUSEADDR ,要么是实际上并没有将这两个套接字绑定到相同的显式接口和端口上。
如果接口/端口已被使用,则bind()不会返回WSAEACCES 。 它将返回WSAEADDRINUSE 。 WSAEACCES意味着你试图绑定到你没有绑定权限的东西。 这是一种不同的错误情况。