2012-05-22 41 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

我希望我能說我很驚訝。 –

相關問題