天天看點

Windows Sockets錯誤碼

下面以表格的形式列出了WSAGetLastError()函數有可能傳回的錯誤代碼和對應的解釋。錯誤代碼的數值對于所有的Windows Sockets相容實作都是一緻的。 

錯誤代碼

Berkeley對應代碼

錯誤數值

說明

WSAEINTR

EINT

10004

函數調用中斷。該錯誤表明由于對WSACancelBlockingCall的調用,造成了一次調用被強行中斷。

WSAEBADF

EBADF

10009

檔案句柄錯誤。該錯誤表明提供的檔案句柄無效。

WSAEACCES

EACCES

10013

權限被拒。嘗試對套接字進行操作,但被禁止。若試圖在sendto或WSASendTo中使用一個廣播位址,但是尚未用setsockopt和SO_BROADCAST這兩個選項設定廣播權限,便會産生這類錯誤。

WSAEFAULT

EFAULT

10014

位址無效。傳給Winsock函數的指針位址無效。若指定的緩沖區太小,也會産生這個錯誤。

WSAEINVAL

EINVAL

10022

參數無效。指定了一個無效參數。例如,假如為WSAIoctl調用指定了一個無效控制代碼,便會産生這個錯誤。另外,它也可能表明套接字目前的狀态有錯,例如在一個目前沒有監聽的套接字上調用accept或WSAAccept。

WSAEMFILEBLOCK

EMFILEBLOCK

10024

打開檔案過多。提示打開的套接字太多了。通常,Microsoft提供者隻受到系統内可用資源數量的限制。

WSAEINPRO

EINPRO

10036

資源暫時不可用。對非鎖定套接字來說,如果請求操作不能立即執行的話,通常會傳回這個錯誤。比如說,在一個非暫停套接字上調用conn ect,就會傳回這個錯誤。因為連接配接請求不能立即執行。

GRESS

   操作正在進行中。目前正在執行非鎖定操作。一般來說不會出現這個錯誤,除非正在開

發1 6 位Wi n s o c k 應用程式。

WSAEALREADY

EALREADY 

10037

操作已完成。一般來說,在非鎖定套接字上嘗試已處于程序中的操作時,會産生這個錯誤。比如,在一個已處于連接配接程序的非鎖定套接字上,再一次調用connect或WSAConnect。另外,服務提供者處于執行回調函數(針對支援回調例程的Winsock函數)的程序中時,也會出現這個錯誤。

WSAENOTSOCK

ENOTSOCK

10038

無效套接字上的套接字操作。任何一個把SOCKET句柄當作參數的Winsock函數都會傳回這個錯誤。它表明提供的套接字句柄無效。

續表

WSAEDESTADDRREQ

EDESTADDRREQ

10039

需要目标位址。這個錯誤表明沒有提供具體位址。比方說,假如在調用sendto時,将目标位址設為INADDR_ANY(任意位址),便會傳回這個錯誤。

WSAEMSGSIZE

EMSGSIZE

10040

消息過長。這個錯誤的含義很多。如果在一個資料報套接字上發送一條消息,這條消息對内部緩沖區而言太大的話,就會産生這個錯誤。再比如,由于網絡本身的限制,使一條消息過長,也會産生這個錯誤。最後,如果收到資料報之後,緩沖區太小,不能接收消息時,也會産生這個錯誤。

WSAEPROTOTYPE

EPROTOTYPE

10041

套接字協定類型有誤。在socket或WSASocket 調用中指定的協定不支援指定的套接字類型。比如,要求建立SOCK_STREAM類型的一個IP套接字,同時指定協定為IPPROTO_UDP,便會産生這樣的錯誤。

WSAENOPROTOOPT

ENOPROTOOPT

10042

協定選項錯誤。表明在getsockopt或setsockopt 調用中,指定的套接字選項或級别不明、未獲支援或者無效。

WSAEPROTONOUPPORT

EPROTONOSUPPORT

10043

不支援的協定。系統中沒有安裝請求的協定或沒有相應的實施方案。比如,如果系統中沒有安裝TCP/IP,而試着建立TCP或UDP套接字時,就會産生這個錯誤。

WSAESOCKTNOSUPPORT

ESOCKTNOSUPPORT

10044

不支援的套接字類型。對指定的位址家族來說,沒有相應的具體套接字類型支援。比如,在向一個不支援原始套接字的協定請求建立一個SOCK_RAW套接字類型時,就會産生這個錯誤。

WSAEOPNOTSUPPORT

EOPNOTSUPPORT

10045

不支援的操作。表明針對指定的對象,試圖采取的操作未獲支援。通常,如果試着在一個不支援調用Winsock函數的套接字上調用了Winsock時,就會産生這個錯誤。

WSAEPFNOSUPPORT

EPFNOSUPPORT

10046

不支援的協定家族。請求的協定家族不存在,或系統内尚未安裝。多數情況下,這個錯誤可與WSAEAFNOSUPPORT互換(兩者等價);後者出現得更為頻繁。

WSAEAFNOSUPPORT

EAFNOSUPPORT

10047

位址家族不支援請求的操作。對套接字類型不支援的操作來說,在試着執行它時,就會出現這個錯誤。比如,在類型為SOCK_STREAM的一個套接字上調用sendto或WSASendTo函數時,就會産生這個錯誤。另外,在調用socket或WSASocket函數的時候,若同時請求了一個無效的位址家族、套接字類型及協定組合,也會産生這個錯誤。

WSAEADDRINUSE

EADDRINUSE

10048

位址正在使用。正常情況下,每個套接字隻允許使用一個套接字位址這個錯誤一般和bind、connect和WSAConnect這三個函數有關。可在setsockopt函數中設定套接字選項SO_REUSEA D D R ,允許多個套接字通路同一個本地I P 位址及端口号

WSAEADDRNOTAVAIL

EADDRNOTAVAIL

10049

不能配置設定請求的位址。API調用中指定的位址對那個函數來說無效時,就會産生這樣的錯誤。例如,若在bind調用中指定一個IP位址,但卻沒有對應的本地IP接口,便會産生這樣的錯誤。另外,通過connect、WSAConnect、sendto、WSASendTo和WSAJoinLeaf這四個函數為準備連接配接的遠端計算機指定端口0時,也會産生這樣的錯誤。

WSAENETDOWN

ENETDOWN

10050

網絡斷開。試圖采取一項操作時,卻發現網絡連接配接中斷。這可能是由于網絡堆棧的錯誤,網絡接口的故障,或者本地網絡的問題造成的。

WSAENETUNREACH

ENETUNREACH

10051

網絡不可抵達。試圖采取一項操作時,卻發現目标網絡不可抵達(不可通路)。這意味着本地主機不知道如何抵達一個遠端主機。換言之,目前沒有已知的路由可抵達那個目标主機。

WSAENETRESET

ENETRESET

10052

網絡重設時斷開了連接配接。由于“保持活動”操作檢測到一個錯誤,造成網絡連接配接的中斷。若在一個已經無效的連接配接之上,通過setsockopt函數設定SO_KEEPALIVE選項,也會出現這樣的錯誤。

WSAECONNABORTED

ECONNABORTED

10053

軟體造成連接配接取消。由于軟體錯誤,造成一個已經建立的連接配接被取消。典型情況下,這意味着連接配接是由于協定或逾時錯誤而被取消的。

WSAECONNRESET

ECONNRESET  

10054

連接配接被對方重設。一個已經建立的連接配接被遠端主機強行關閉。若遠端主機上的程序異常中止運作(由于記憶體沖突或硬體故障),或者針對套接字執行了一次強行關閉,便會産生這樣的錯誤。針對強行關閉的情況,可用SO_LINGER套接字選項和setsockopt來配置一個套接字

WSAENOBUFS

ENOBUFS

10055

沒有緩沖區空間。由于系統缺少足夠的緩沖區空間,請求的操作不能執行。

WSAEISCONN

EISCONN

10056

套接字已經連接配接。表明在一個已建立連接配接的套接字上,試圖再建立一個連接配接。要注意的是,資料報和資料流套接字均有可能出現這樣的錯誤。使用資料報套接字時,假如事先已認證connect或WSAConnect調用,為資料報通信關聯了一個端點的位址,那麼以後試圖再次調用sendto或WSASendTo,便會産生這樣的錯誤。

WSAENOTCONN

ENOTCONN

10057

套接字尚未連接配接。若在一個尚未建立連接配接的“面向連接配接”套接字上發出資料收發請求,便會産生這樣的錯誤。

WSAESHUTDOWN

ESHUTDOWN

10058

套接字關閉後不能發送。表明已認證對shutdown的一次調用,部分關閉了套接字,但後又請求進行資料的收發操作。要注意的是,這種錯誤隻會在已經關閉的那個資料流動方向上才會發生。舉個例子來說,完成資料發送後,若調用shutdown,那麼以後任何資料發送調用都會産生這樣的錯誤。

WSAETIMEDOUT

ETIMEDOUT

10060

連接配接逾時。若發出了一個連接配接請求,但經過規定的時間,遠端計算機仍未作出正确的響應(或根本沒有任何響應),便會發生這樣的錯誤。要想收到這樣的錯誤,通常需要先在套接字上設定好SO_SNDTIMEO和SO_RCVTIMEO選項,然後調用connect及WSAConnect函數。

WSAECONNREFUSED

ECONNREFUSED

10061

連接配接被拒。由于被目标機器拒絕,連接配接無法建立。這通常是由于在遠端機器上,沒有任何應用程式可在那個位址之上,為連接配接提供服務。

WSAEHOSTDOWN

EHOSTDOWN

10064

主機關閉。這個錯誤指出由于目标主機關閉,造成操作失敗。然而,應用程式此時更有可能收到的是一條WSAETIMEDOUT(連接配接逾時)錯誤,因為對方關機的情況通常是在試圖建立一個連接配接的時候發生的。

WSAEHOSTUNREACH

EHOSTUNREACH

10065

沒有到主機的路由。應用程式試圖通路一個不可抵達的主機。該錯誤類似于WSAENETUNREACH。

WSASYSNOTREAY

10091

網絡子系統不可用。調用WSAStartup時,若提供者不能正常工作(由于提供服務的基層系統不可用),便會傳回這種錯誤。

WSAVERNOTSUPPORTED

10092

Winsock. dll版本有誤。表明不支援請求的Winsock提供者版本。

WSANOTINITIAL ISED

10093

Winsock尚未初始化。尚未成功完成對WSAStartup的一次調用。

繼續閱讀