[英]On Windows, when will a 'socket()' call return WSAEPROVIDERFAILEDINIT?
[英]On windows, when will 'socket' call return WSAEINVALIDPROVIDER when 'WSAStartUp' has succeeded for 2.2 as requested version?
假設,我們的客戶端應用程序執行以下操作:
WSADATA wsa_data;
int ret;
SOCKET sock;
ret = WSAStartup (MAKEWORD (2, 2), &wsa_data);
if (ret ==0) {
sock = socket (AF_INET8, SOCK_DGRAM, IPROTO_UDP);
}
sock == INVALID_SOCKET 和 WSAGetLastError() 什么時候會返回 WSAEINVALIDPROVIDER?
'socket' function 的MS 文檔說,當“服務提供商返回 2.2 以外的版本”時,它可以返回 WSAEINVALIDPROVIDER。
即,當 WSAStartUp 將成功作為請求版本的 2.2 時,TCP/IP 傳輸服務提供商能否在“套接字”調用期間返回其他 2.2 版本? 如果是,為什么? 在什么情況下? 以及如何補救?
可以使用 Winsock 服務提供者接口 API 來安裝自定義服務提供者,例如實現您自己的 TCP/IP 堆棧。
看:
然后看你鏈接的socket docs下的備注:
WSAStartup 的調用者在 wVersionRequested 參數中傳遞應用程序支持的 Windows Sockets 規范的最高版本。
Winsock 將利用第一個支持地址族、套接字類型和協議參數的請求組合的可用服務提供程序。
因此,如果您(或其他一些應用程序)注冊了一個自定義服務提供程序,該服務提供程序不響應 2.2 作為版本,那么您會收到該錯誤。 為了解決這個問題,select 另一個服務提供商或卸載不正確的(我敢說是損壞的)一個。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.