我遇到了一种奇怪的行为。
manual claimed:“当两个套接字绑定到相同的端口号但在不同的显式接口上时,没有冲突”。 为什么在步骤3中,系统在以下情况下失败?这是操作系统中的错误吗? (我在Microsoft forums上的帖子没有答案) 有一些解决方法吗?
注意:tcp-ports是相同的,接口是不同的和显式(在步骤1和2-3之间)。用户是一样的。
问题出现在Windows Vista(32位),Windows Server 2008(32位),Window Server 2008 R2(64位)等中。
在Windows XP中没问题:第3步成功。
更新:仅供参考,同样的问题:Windows 7 socket bind behavior difference from XP, with reuse address socket option (WSAEACCES 10013 error)
答案 0 :(得分:3)
当两个套接字使用SO_REUSEADDR
时,将两个套接字绑定到同一个显式接口和端口,保证会成功,即使Microsoft documentation这样说也是如此。它必须是代码中的错误,要么在调用SO_REUSEADDR
之前未在两个套接字上启用bind()
,要么实际上并未将两个套接字绑定到同一显式接口和端口。
bind()
不会返回WSAEACCES
。它返回WSAEADDRINUSE
。 WSAEACCES
表示您尝试绑定到您无权绑定的内容。这是一种不同的错误条件。