2012-05-22 46 views
0

问题,我现在面临: -选择抛出错误WSAENOTSOCK

选择(..)的API时,含在Win7家庭高级IPv6和IPv4插座FD_SET集,但同一应用程序运行正常叫做抛出错误在其他win7机器上。但是,如果我只在FD_SET中使用IPv6或IPv4套接字,那么它运行良好。所以我认为,系统支持IPv6和IPv4。

我尝试使用服务器从下面的链接: -

http://msdn.microsoft.com/en-us/library/windows/desktop/ms738639%28v=vs.85%29.aspx

即使这个样本是从选择调用同样的错误。

任何人都可以请帮助我解决这个错误背后的原因并解决这个问题。

谢谢!

回答

0

不幸的是,Windows不允许在同一个调用中将来自不同提供者的套接字混合到select。这是因为每个供应商都被允许执行自己的select处理程序。

fd_set结构中包含的套接字必须与单个服务提供者相关联。 - select function

Windows将选择一个供应商发送select给(我相信,在集中的第一个插槽的提供者),而供应商将无法识别其他供应商的插座。老实说,你不应该使用select - 它只是提供与BSD套接字接口的兼容性。这绝对不是“Windows方式”。

+0

感谢您的回复。 我使用TCP类型的多地址族套接字IPv4和IPv6。我认为在这种情况下服务提供商是一样的。它与Windows中的IPv6兼容服务器中的链接一样http://msdn.microsoft.com/en-us/library/windows/desktop/ms738639%28v=vs.85%29.aspx Select是标准方式得到实际收到请求的请求的套接字。我认为还有一些其他原因可能与导致此问题的LSP有关。 –

+0

我得到了这个错误背后的原因。已安装的网络正在将其LSP插入套接字层。此LSP导致此故障。 –

+0

我希望我能说我很惊讶。 –