簡體   English   中英

在 windows 上,當 'WSAStartUp' 已按照請求的版本為 2.2 成功時,'socket' 調用何時返回 WSAEINVALIDPROVIDER?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM