Windows Sockets 錯誤碼

大部分的 Windows Sockets 2 函式不會在函式傳回時傳回錯誤的特定原因。 如需詳細資訊,請參閱 處理 Winsock 錯誤 主題。

WSAGetLastError 函式會傳回呼叫執行緒發生的最後一個錯誤。 當特定的 Windows Sockets 函式指出發生錯誤時,應該立即呼叫此函式,以擷取失敗函式呼叫的擴充錯誤碼。 這些錯誤碼和與錯誤碼相關聯的簡短文字描述是在 Winerror.h 標頭檔中定義。 FormatMessage函式可用來取得傳回錯誤的訊息字串。

如需如何將通訊端應用程式移植到 Winsock 時如何處理錯誤碼的資訊,請參閱 錯誤碼 - errno、h_errno 和 WSAGetLastError

下列清單描述 WSAGetLastError 函式所傳回的可能錯誤碼。 錯誤會以數值順序列出錯誤宏名稱。 Winsock2.h標頭檔中定義的某些錯誤碼不會從任何函式傳回。

傳回碼/值 Description
WSA_INVALID_HANDLE
6
指定的事件物件控制碼無效。
應用程式會嘗試使用事件物件,但指定的控制碼無效。
WSA_NOT_ENOUGH_MEMORY
8
記憶體不足。
應用程式使用直接對應至 Windows 函式的 Windows Sockets 函式。 Windows 函式表示缺少必要的記憶體資源。
WSA_INVALID_PARAMETER
87
一或多個參數無效。
應用程式使用直接對應至 Windows 函式的 Windows Sockets 函式。 Windows 函式指出一或多個參數有問題。
WSA_OPERATION_ABORTED
995
已中止重迭的作業。
因為通訊端關閉,或在 WSAIoctl中執行 SIO_FLUSH 命令,所以已取消重迭的作業。
WSA_IO_INCOMPLETE
996
重迭的 I/O 事件物件未處於訊號狀態。
應用程式嘗試判斷尚未完成之重迭作業的狀態。 使用 WSAGetOverlappedResult (且 fWait 旗標在輪詢模式中設定為 FALSE) 的應用程式,以判斷重迭作業何時完成,請取得此錯誤碼,直到作業完成為止。
WSA_IO_PENDING
997
重迭的作業稍後將會完成。
應用程式初始化了無法立即完成的重疊作業。 作業完成時,稍後會提供完成指示。
WSAEINTR
10004
中斷的函式呼叫。
封鎖作業因 呼叫 WSACancelBlockingCall而中斷。
WSAEBADF
10009
檔案控制代碼無效。
提供的檔案控制碼無效。
WSAEACCES
10013
許可權遭拒。
嘗試以其存取權限禁止的方式存取通訊端。 例如,使用 sendto 的廣播位址,而不需使用 setockopt (SO_BROADCAST) 設定廣播許可權。
WSAEACCES 錯誤的另一個可能原因是,當系結函式在 Windows NT 4.0 上呼叫 (SP4 和更新版本) 時,另一個應用程式、服務或核心模式驅動程式會系結至具有獨佔存取權的相同位址。 這類獨佔存取是 sp4 和更新版本Windows NT 4.0 的新功能,並使用SO_EXCLUSIVEADDRUSE 選項來實作
WSAEFAULT
10014
不正確的位址。
系統在嘗試使用呼叫的指標引數時偵測到不正確指標位址。 如果應用程式傳遞不正確指標值,或緩衝區的長度太小,就會發生此錯誤。 例如,如果引數的長度是 sockaddr 結構,則小於 (sockaddr) 的大小。
WSAEINVAL
10022
不正確引數。
例如, (提供一些不正確引數,指定 setockopt 函式) 的無效層級。 在某些情況下,它也會參考通訊端的目前狀態,例如,在未接聽的通訊端上呼叫 accept
WSAEMFILE
10024
開啟的檔案太多。
太多開啟的通訊端。 每個實作可能都有可用的通訊端控制碼數目上限,可以是全域、每個進程或每個執行緒。
WSAEWOULDBLOCK
10035
資源暫時無法使用。
此錯誤會從無法立即完成的非封鎖通訊端上的作業傳回,例如,當沒有資料排入佇列以從通訊端讀取時 發生 。 這是非嚴重錯誤,稍後應該重試作業。 WSAEWOULDBLOCK 通常會回報為在非封鎖SOCK_STREAM通訊端上呼叫 連線 的結果,因為必須經過一些時間才能建立連線。
WSAEINPROGRESS
10036
作業現在正在進行中。
正在執行封鎖作業。 Windows 通訊端只允許對每個工作或執行緒進行單一封鎖作業,而且如果發出任何其他函式呼叫, (是否參考該函式或任何其他通訊端,) 函式失敗併發生 WSAEINPROGRESS 錯誤。
WSAEALREADY
10037
作業已在進行中。
已在進行中作業的非封鎖通訊端上嘗試進行作業,也就是說 ,在已經 連線的非封鎖通訊端上呼叫第二次連線,或取消已取消已取消或已完成之 WSAAsyncGetXbyY) 非同步 (要求。
WSAENOTSOCK
10038
非ocket 上的通訊端作業。
嘗試在不是通訊端的內容上執行作業。 通訊端控制碼參數未參考有效的通訊端,或針對 selectfd_set 的成員無效。
WSAEDESTADDRREQ
10039
需要目的地位址。
在通訊端上的作業中省略必要的位址。 例如,如果使用ADDR_ANY的遠端位址呼叫 sendto ,就會傳回此錯誤。
WSAEMSGSIZE
10040
訊息太長。
在資料包通訊端上傳送的訊息大於內部訊息緩衝區或其他網路限制,或是用來接收資料包的緩衝區小於資料包本身。
WSAEPROTOTYPE
10041
通訊端的通訊協定類型錯誤。
通訊協定是在 通訊端 函式呼叫中指定,不支援要求的通訊端類型語意。 例如,ARPA 網際網路 UDP 通訊協定不能指定通訊端類型為 SOCK_STREAM。
WSAENOPROTOOPT
10042
不正確的通訊協定選項。
在取得ockoptsetockopt呼叫中指定了未知、無效或不支援的選項或層級。
WSAEPROTONOSUPPORT
10043
不支援通訊協定。
要求的通訊協定尚未設定到系統中,或不存在其實作。 例如, 通訊端 呼叫會要求SOCK_DGRAM通訊端,但會指定資料流程通訊協定。
WSAESOCKTNOSUPPORT
10044
不支援通訊端類型。
這個地址家族中不存在對指定通訊端類型的支援。 例如,選擇性類型SOCK_RAW可能會在 通訊端 呼叫中選取,而且實作完全不支援SOCK_RAW通訊端。
WSAEOPNOTSUPP
10045
不支援作業。
參考的物件類型不支援嘗試的作業。 通常,當通訊端描述項無法支援此作業的通訊端嘗試接受資料包通訊端上的連線時,就會發生這種情況。
WSAEPFNOSUPPORT
10046
不支援通訊協定系列。
通訊協定系列尚未設定為系統,或不存在任何實作。 此訊息與 WSAEAFNOSUPPORT 稍有不同。 不過,在大部分情況下都可以交換,而且所有傳回這些訊息的 Windows Sockets 函式也會指定 WSAEAFNOSUPPORT。
WSAEAFNOSUPPORT
10047
通訊協定系列不支援位址系列。
已使用與要求通訊協定不相容的位址。 所有通訊端都會以相關聯的位址系列 (建立,也就是網際網路通訊協定) 的AF_INET,以及SOCK_STREAM) 的泛型通訊協定類型 (。 如果在 通訊端 呼叫中明確要求不正確的通訊協定,或錯誤系列位址用於通訊端,例如 sendto中,則會傳回此錯誤。
WSAEADDRINUSE
10048
已在使用中的位址。
一般而言,只允許使用每個通訊端位址 (通訊協定/IP 位址/埠) 。 如果應用程式嘗試 將通訊端系結 至已用於現有通訊端的 IP 位址/埠,或未正確關閉的通訊端,或仍在關閉過程中的通訊端,就會發生此錯誤。 對於需要將多個通訊端 系結 至相同埠號碼的伺服器應用程式,請考慮使用 setockopt (SO_REUSEADDR) 。 用戶端應用程式通常完全不需要呼叫 系結連線 會自動選擇未使用的埠。 當系 與ADDR_ANY) 相關的萬用字元位址 (呼叫時,WSAEADDRINUSE 錯誤可能會延遲到認可特定位址為止。 這可能會在稍後呼叫另一個函式,包括 connectlistenWSAConnectWSAJoinLeaf
WSAEADDRNOTAVAIL
10049
無法指派要求的位址。
要求位址在其內容中無效。 這通常會導致嘗試 系結 至對本機電腦不正確位址。 如果遠端位址或埠對遠端 (電腦無效,例如位址或埠 0) ,這也可能是 連線sendtoWSAConnectWSAJoinLeafWSASendTo
WSAENETDOWN
10050
網路已關閉。
通訊端作業遇到停止的網路。 這可能表示一個嚴重的網路系統 (也就是,執行 Windows Sockets DLL 的通訊協定堆疊)、網路介面或區域網路本身故障。
WSAENETUNREACH
10051
無法連線到網路。
通訊端作業嘗試連線到無法連線的網路。 這通常表示本機軟體不知道要連線到遠端主機的路由。
WSAENETRESET
10052
重設時網路中斷連線。
連線已中斷,因為持續活動偵測到作業正在進行時失敗。 如果嘗試在已失敗的連線上設定SO_KEEPALIVE,setockopt也可以傳回它。
WSAECONNABORTED
10053
軟體造成連線中止。
已建立的連線已由主機電腦中的軟體中止,可能是因為資料傳輸逾時或通訊協定錯誤。
WSAECONNRESET
10054
依對等重設連線。
遠端主機已強制關閉一個現有連線。 這通常會導致遠端主機上的對等應用程式突然停止、主機重新開機、主機或遠端網路介面已停用,或遠端主機使用硬式關閉 (請參閱 setockopt ,以取得遠端通訊端上SO_LINGER選項的詳細資訊) 。 當一或多個作業正在進行時,由於持續運作活動偵測到失敗而中斷連線,也可能會產生此錯誤。 WSAENETRESET 進行中的作業失敗。 後續作業因 WSAECONNRESET 而失敗。
WSAENOBUFS
10055
沒有可用的緩衝區空間。
無法執行通訊端上的作業,因為系統缺少足夠的緩衝區空間,或因為佇列已滿。
WSAEISCONN
10056
通訊端已連線。
連線要求是在已連線的通訊端上進行。 某些實作也會傳回此錯誤:如果在連線 SOCK_DGRAM的通訊端上呼叫 sendto,SOCK_STREAM通訊端 (上呼叫sendto,則會忽略sendto中的to參數) ,但其他實作會將它視為合法發生。
WSAENOTCONN
10057
通訊端未連線。
不允許傳送或接收資料的要求,因為通訊端未連線,且在資料包通訊端上使用 sendto 傳送時 (,) 未提供位址。 任何其他類型的作業也可能傳回此錯誤,例如,如果已重設連線, 則 setockopt 設定 SO_KEEPALIVE
WSAESHUTDOWN
10058
在通訊端關機之後無法傳送。
不允許傳送或接收資料的要求,因為通訊端已在先前 的關機 呼叫中以該方向關閉。 藉由呼叫 關機 ,會要求部分關閉通訊端,這是傳送或接收的訊號,或兩者都已停止。
WSAETOOMANYREFS
10059
太多參考。
某些核心物件的參考太多。
WSAETIMEDOUT
10060
連線逾時。
連線嘗試失敗,因為連線方在一段時間後未正確回應,或已建立的連接失敗,因為連線主機無法回應。
WSAECONNREFUSED
10061
連線遭到拒絕。
因為目的電腦主動拒絕連線,所以無法建立連線。 這通常會導致嘗試連線到外部主機上非作用中的服務,也就是沒有執行伺服器應用程式的服務。
WSAELOOP
10062
無法翻譯名稱。
無法翻譯名稱。
WSAENAMETOOLONG
10063
名稱太長。
名稱元件或名稱太長。
WSAEHOSTDOWN
10064
主機已關閉。
通訊端作業失敗,因為目的地主機已關閉。 通訊端作業遇到無效主機。 本機主機上的網路活動尚未起始。 這些條件較可能由錯誤 WSAETIMEDOUT 指出。
WSAEHOSTUNREACH
10065
沒有傳送至主機的路由。
已嘗試對無法連接的主機進行通訊端作業。 請參閱 WSAENETUNREACH。
WSAENOTEMPTY
10066
目錄不是空的。
無法移除不是空的目錄。
WSAEPROCLIM
10067
太多進程。
Windows Sockets 實作可能會限制可同時使用的應用程式數目。 如果達到限制,WSAStartup可能會失敗,並出現此錯誤。
WSAEUSERS
10068
超過使用者配額。
使用者配額不足。
WSAEDQUOT
10069
超過磁片配額。
磁片配額不足。
WSAESTALE
10070
過時的檔案控制碼參考。
不再提供檔案控制碼參考。
WSAEREMOTE
10071
專案是遠端的。
專案無法在本機使用。
WSASYSNOTREADY
10091
網路子系統無法使用。
如果 Windows Sockets 實作目前無法運作, WSAStartup 會傳回此錯誤,因為它用來提供網路服務的基礎系統目前無法使用。 使用者應該檢查:
  • 適當的 Windows Sockets DLL 檔案位於目前的路徑中。
  • 他們不嘗試同時使用多個 Windows Sockets 實作。 如果您的系統上有多個 Winsock DLL,請確定路徑中的第一個 DLL 適用于目前載入的網路子系統。
  • Windows Sockets 實作檔,以確定目前已安裝並正確設定所有必要的元件。
WSAVERNOTSUPPORTED
10092
Winsock.dll版本超出範圍。
目前的 Windows Sockets 實作不支援應用程式所要求的 Windows Sockets 規格版本。 檢查是否未存取舊的 Windows Sockets DLL 檔案。
WSANOTINITIALISED
10093
尚未執行成功的 WSAStartup。
應用程式未呼叫 WSAStartupWSAStartup 失敗。 應用程式可能會存取目前作用中工作的通訊端, (也就是嘗試在工作之間共用通訊端) ,或 已呼叫 WSACleanup 太多次。
WSAEDISCON
10101
正常關機進行中。
由 WSARecvWSARecvFrom傳回,表示遠端合作物件已起始正常關機順序。
WSAENOMORE
10102
沒有更多結果。
WSALookupServiceNext函式無法再傳回任何結果。
WSAECANCELLED
10103
已取消通話。
呼叫 WSALookupServiceEnd 函 式時,此呼叫仍在處理中。 呼叫已取消。
WSAEINVALIDPROCTABLE
10104
程式調用資料表無效。
服務提供者程序呼叫資料表無效。 服務提供者傳回了假程式表來Ws2_32.dll。 這通常是由一或多個函式指標為 Null所造成。
WSAEINVALIDPROVIDER
10105
服務提供者無效。
要求的服務提供者無效。 如果找不到指定的通訊協定專案, WSCGetProviderInfoWSCGetProviderInfo32 函式會傳回此錯誤。 如果服務提供者傳回 2.0 以外的版本號碼,也會傳回此錯誤。
WSAEPROVIDERFAILEDINIT
10106
服務提供者無法初始化。
無法載入或初始化要求的服務提供者。 如果無法載入服務提供者的 DLL, (LoadLibrary 失敗,) 或提供者的 WSPStartupNSPStartup 函式失敗,就會傳回此錯誤。
WSASYSCALLFAILURE
10107
系統呼叫失敗。
應該永遠不會失敗的系統呼叫失敗。 這是在各種情況下傳回的一般錯誤碼。
當應該永遠不會失敗的系統呼叫失敗時傳回。 例如,如果 呼叫 WaitForMultipleEvents 失敗,或其中一個登錄函式嘗試操作通訊協定/命名空間目錄失敗。
當提供者未傳回 SUCCESS 且未提供擴充的錯誤碼時傳回。 可以指出服務提供者實作錯誤。
WSASERVICE_NOT_FOUND
10108
找不到服務。
不知道這類服務。 在指定的名稱空間中找不到服務。
WSATYPE_NOT_FOUND
10109
找不到類別類型。
找不到指定的類別。
WSA_E_NO_MORE
10110
沒有其他結果。
WSALookupServiceNext函式無法再傳回任何結果。
WSA_E_CANCELLED
10111
已取消通話。
呼叫 WSALookupServiceEnd 函式時,此呼叫仍在處理中。 呼叫已取消。
WSAEREFUSED
10112
資料庫查詢遭到拒絕。
資料庫查詢因為主動拒絕而失敗。
WSAHOST_NOT_FOUND
11001
找不到主機。
沒有已知的此類主機。 名稱不是官方主機名稱或別名,或無法在查詢) (資料庫中找到該名稱。 這個錯誤也可能針對通訊協定和服務查詢傳回,表示無法在相關的資料庫中找到指定的名稱。
WSATRY_AGAIN
11002
找不到非授權主機。
這通常是主機名稱解析期間的暫時錯誤,表示本機伺服器未收到來自授權伺服器的回應。 稍後重試也許可以成功。
WSANO_RECOVERY
11003
這是無法復原的錯誤。
這表示在資料庫查閱期間發生某種無法復原的錯誤。 這可能是因為找不到與 BSD 相容的 HOSTS、SERVICES 或 PROTOCOLS 檔案 (的資料庫檔案) ,或伺服器傳回 DNS 要求時發生嚴重錯誤。
WSANO_DATA
11004
有效名稱,沒有要求類型的資料記錄。
要求的名稱有效,且在資料庫中找到,但未解析正確的相關聯資料。 這的一般範例是主機名稱對位址轉換嘗試, (使用 gethostbynameWSAAsyncGetHostByName) ,它會使用 DNS (功能變數名稱伺服器) 。 會傳回 MX 記錄,但未傳回 A 記錄,表示主機本身存在,但無法直接連線。
WSA_QOS_RECEIVERS
11005
QoS 接收器。
至少有一個 QoS 保留已抵達。
WSA_QOS_SENDERS
11006
QoS 傳送者。
已抵達至少一個 QoS 傳送路徑。
WSA_QOS_NO_SENDERS
11007
沒有 QoS 傳送者。
沒有 QoS 傳送者。
WSA_QOS_NO_RECEIVERS
11008
QoS 沒有接收者。
沒有 QoS 接收器。
WSA_QOS_REQUEST_CONFIRMED
11009
已確認 QoS 要求。
已確認 QoS 保留要求。
WSA_QOS_ADMISSION_FAILURE
11010
QoS 許可錯誤。
由於資源不足,所以發生 QoS 錯誤。
WSA_QOS_POLICY_FAILURE
11011
QoS 原則失敗。
QoS 要求遭到拒絕,因為原則系統無法在現有原則內配置要求的資源。
WSA_QOS_BAD_STYLE
11012
QoS 不正確的樣式。
遇到未知或衝突的 QoS 樣式。
WSA_QOS_BAD_OBJECT
11013
QoS 不正確的物件。
filterspec 的某些部分或提供者特定的緩衝區一般發生問題。
WSA_QOS_TRAFFIC_CTRL_ERROR
11014
QoS 流量控制錯誤。
基礎流量控制 (TC) API 的錯誤,因為 TC API 已轉換一般 QoS 要求以進行本機強制執行。 這可能是因為記憶體不足錯誤或內部 QoS 提供者錯誤所造成。
WSA_QOS_GENERIC_ERROR
11015
QoS 一般錯誤。
一般 QoS 錯誤。
WSA_QOS_ESERVICETYPE
11016
QoS 服務類型錯誤。
在 QoS 流程規格中找到無效或無法辨識的服務類型。
WSA_QOS_EFLOWSPEC
11017
QoS flowspec 錯誤。
在 QOS結構中找到無效或不一致的 flowspec。
WSA_QOS_EPROVSPECBUF
11018
不正確 QoS 提供者緩衝區。
不正確 QoS 提供者特定緩衝區。
WSA_QOS_EFILTERSTYLE
11019
不正確 QoS 篩選樣式。
使用了不正確 QoS 篩選樣式。
WSA_QOS_EFILTERTYPE
11020
不正確 QoS 篩選類型。
使用了不正確 QoS 篩選類型。
WSA_QOS_EFILTERCOUNT
11021
不正確的 QoS 篩選計數。
FLOWDESCRIPTOR 中指定了不正確的 QoS FILTERSPEC 數目。
WSA_QOS_EOBJLENGTH
11022
不正確 QoS 物件長度。
在 QoS 提供者特定緩衝區中指定了具有無效 ObjectLength 欄位的物件。
WSA_QOS_EFLOWCOUNT
11023
不正確的 QoS 流量計數。
QoS 結構中指定了不正確的流量描述項數目。
WSA_QOS_EUNKOWNPSOBJ
11024
無法辨識的 QoS 物件。
在 QoS 提供者特定緩衝區中找到無法辨識的物件。
WSA_QOS_EPOLICYOBJ
11025
不正確 QoS 原則物件。
在 QoS 提供者特定的緩衝區中找到不正確原則物件。
WSA_QOS_EFLOWDESC
11026
不正確 QoS 流量描述元。
在流程描述元清單中找到不正確 QoS 流量描述元。
WSA_QOS_EPSFLOWSPEC
11027
不正確 QoS 提供者特定 flowspec。
在 QoS 提供者特定緩衝區中找到無效或不一致的 flowspec。
WSA_QOS_EPSFILTERSPEC
11028
不正確 QoS 提供者特定 filterspec。
在 QoS 提供者特定緩衝區中找到不正確 FILTERSPEC。
WSA_QOS_ESDMODEOBJ
11029
不正確 QoS 圖形捨棄模式物件。
在 QoS 提供者特定的緩衝區中找到不正確圖形捨棄模式物件。
WSA_QOS_ESHAPERATEOBJ
11030
不正確 QoS 成形速率物件。
在 QoS 提供者特定的緩衝區中找到不正確成形速率物件。
WSA_QOS_RESERVED_PETYPE
11031
保留原則 QoS 元素類型。
在 QoS 提供者特定的緩衝區中找到保留的原則元素。

 

規格需求

需求
標頭
Winsock2.h;
Winerror.h

另請參閱

錯誤碼 - errno、h_errno 和 WSAGetLastError

處理 Winsock 錯誤

FormatMessage

WSAGetLastError