选择抛出错误WSAENOTSOCK

时间:2012-05-22 08:48:47

标签: c++

我正在面对: -

选择(..)API在使用包含Win7 Home premium上的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

即使这个样本与select call相同也是错误。

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

感谢!!!

1 个答案:

答案 0 :(得分:0)

不幸的是,Windows不允许在同一个select的调用中混合来自不同提供商的套接字。这是因为允许每个提供程序实现自己的select处理程序。

  

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

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