WSAGetLastError()

WSAGetLastError()

“WSAGetLastError()”是指該函式返回上次發生的網路錯誤,當一特定的Windows Sockets API函式指出一個錯誤已經發生,該函式就應調用來獲得對應的錯誤代碼。

基本介紹

  • 外文名:WSAGetLastError()
  • 屬於:該函式返回上次發生的網路錯誤
  • 調用:來獲得對應的錯誤代碼
  • 關於:Windows Sockets提供者的說明
簡述,返回值,

簡述

#include <winsock.h>
int PASCAL FAR WSAGetLastError ( void );
返回值:
返回值指出了該執行緒進行的上一次Windows Sockets API函式調用時的錯誤代碼.
關於Windows Sockets提供者的說明:
這裡使用WSAGetLastError()函式來獲得上一次的錯誤代碼,而不是依靠全局錯誤變數, 是為了提供和將來的多執行緒環境相兼容.
注意在一個非占先的Windows環境下,WSAGetLastError()只用來獲得Windows Sockets API錯誤.在占先環境下,WSAGetLastError()將調用GetLastError(), 來獲得所有在每執行緒基礎上的Win32 API函式的錯誤狀態.為提高可移植性,應用程式應在調用失敗後立即使用WSAGetLastError().
參見:

返回值

6 - WSA_INVALID_HANDLE
指定的事件對象無效。若使用與Win32函式對應的Winsock函式,便有可能產生這樣的Win32錯誤。它表明傳遞給WSAWaitForMultipleEvents的一個句柄是無效的。
8 - WSA_NOT_ENOUGH_MEMORY
記憶體不夠。這個Win32錯誤指出記憶體數量不足,無法完成指定的操作。
87 - WSA_INVALID_PARAMETER
一個或多個參數無效。這個Win32錯誤表明傳遞到函式內部的參數無效。假若事件計數參數無效,那么在執行WSAWaitForMultipleEvents的時候,也會發生這樣的錯誤。
258 - WSA_WAIT_TIMEOUT
操作逾時。這個Win32錯誤指出重疊I/O操作未在規定的時間內完成。
995 - WSA_OPERATION_ABORTED
重疊操作被取消。這個Win32錯誤指出由於套接字的關閉,造成一次重疊I/O操作的取消。
除此以外,該錯誤也可能在執行SIO_FLUSH這個I/O控制命令時出現。
996 - WSA_IO_INCOMPLETE
重疊I/O事件對象未處於傳信狀態。這個Win32錯誤也和重疊I/O操作密切相關,在調用WSAGetOverlappedResults函式的時候產生,指出重疊I/O操作尚未完成。
997 - WSA_IO_PENDING
重疊操作將在以後完成。用Winsock函式發出一次重疊I/O操作時,若出現這樣的Win32錯誤,便表明操作尚未完成,而且會在以後的某個時間完成。
10004 - WSAEINTR
函式調用中斷。該錯誤表明由於對WSACancelBlockingCall的調用,造成了一次調用被強行中斷。
10009 - WSAEBADF
檔案句柄錯誤。該錯誤表明提供的檔案句柄無效。在MicrosoftWindowsCE下,socket函式可能返回這個錯誤,表明共享串口處於“忙”狀態。
10013 - WSAEACCES
許可權被拒。嘗試對套接字進行操作,但被禁止。若試圖在sendto或WSASendTo中使用一個廣播地址,但是尚未用setsockopt和SO_BROADCAST這兩個選項設定廣播許可權,便會產生這類錯誤。
10014 - WSAEFAULT
地址無效。傳給Winsock函式的指針地址無效。若指定的緩衝區太小,也會產生這個錯誤。
10022 - WSAEINVAL
參數無效。指定了一個無效參數。例如,假如為WSAIoctl調用指定了一個無效控制代碼,便會產生這個錯誤。另外,它也可能表明套接字當前的狀態有錯,例如在一個沒有監聽的套接字上調用accept或WSAAccept的時候。
10024 - WSAEMFILE
打開檔案過多。提示打開的套接字太多了。通常,Microsoft提供者只受到系統內可用資源數量的限制。
10035 - WSAEWOULDBLOCK
資源暫時不可用。對非阻塞套接字來說,如果請求操作不能立即執行的話,通常會返回這個錯誤。比如說,在一個非阻塞套接字上調用connect,就會返回這個錯誤。因為連線請求不能立即執行。
10036 - WSAEINPROGRESS
操作正在進行中。當前正在執行非鎖定操作。一般來說不會出現這個錯誤,除非正在開發16位Winsock應用程式。
10037 - WSAEALREADY
操作已完成。一般來說,在非鎖定套接字上嘗試已處於進程中的操作時,會產生這個錯誤。比如,在一個已處於連線進程的非鎖定套接字上,再一次調用connect或WSAConnect。
另外,服務提供者處於執行回調函式(針對支持回調例程的Winsock函式)的進程中時也會出現這個錯誤。
10038 - WSAENOTSOCK
無效套接字上的套接字操作。任何一個把SOCKET句柄當作參數的Winsock函式都會返回這個錯誤。它表明提供的套接字句柄無效。
10039 - WSAEDESTADDRREQ
需要目標地址。這個錯誤表明沒有提供具體地址。比方說,假如在調用sendto時,將目標地址設為INADDR_ANY(任意地址),便會返回這個錯誤。
10040 - WSAEMSGSIZE
訊息過長。這個錯誤的含義很多。如果在一個數據報套接字上傳送一條訊息,這條訊息
對內部緩衝區而言太大的話,就會產生這個錯誤。再比如,由於網路自身的限制,使一條訊息過長,也會產生這個錯誤。最後,如果收到數據報之後,緩衝區太小,不能接收訊息時,也會產生這個錯誤。
10041 - WSAEPROTOTYPE
套接字協定類型有誤。在socket或WSASocket調用中指定的協定不支持指定的套接字類型。
比如,要求建立SOCK_STREAM類型的一個IP套接字,同時指定協定為IPPROTO_UDP,便會產生這樣的錯誤。
10042 - WSAENOPROTOOPT
協定選項錯誤。表明在getsockopt或setsockopt調用中,指定的套接字選項或級別不明、未獲支持或者無效。
10043 - WSAEPROTONOSUPPORT
不支持的協定。系統中沒有安裝請求的協定或沒有相應的實施方案。比如,如果系統中沒有安裝TCP/IP,而試著建立TCP或UDP套接字時,就會產生這個錯誤。
10044 - WSAESOCKTNOSUPPORT
不支持的套接字類型。對指定的地址家族來說,沒有相應的具體套接字類型支持。比如,在向一個不支持原始套接字的協定請求建立一個SOCK_RAW套接字類型時,就會產生這個錯誤。
10045 - WSAEOPNOTSUPP
不支持的操作。表明針對指定的對象,試圖採取的操作未獲支持。通常,如果試著在一
個不支持調用Winsock函式的套接字上調用了Winsock時,就會產生這個錯誤。比如,在一個數據報套接字上調用accept或WSAAccept函式時,就會產生這樣的錯誤。
10046 - WSAEPFNOSUPPORT
不支持的協定家族。請求的協定家族不存在,或系統內尚未安裝。多數情況下,這個錯誤可與WSAEAFNOSUPPORT互換(兩者等價);後者出現得更為頻繁。
10047 - WSAEAFNOSUPPORT
地址家族不支持請求的操作。對套接字類型不支持的操作來說,在試著執行它時,就會出現這個錯誤。比如,在類型為SOCK_STREAM的一個套接字上調用sendto或WSASendTo函式時,就會產生這個錯誤。另外,在調用socket或WSASocket函式的時候,若同時請求了一個無效的地址家族、套接字類型及協定組合,也會產生這個錯誤。
10048 - WSAEADDRINUSE
下地址正在使用。正常情況下,每個套接字只允許使用一個套接字地址(例如,一個IP套接字地址由本地IP位址及連線埠號組成)。這個錯誤一般和bind、connect和WSAConnect這三個函式有關。可在setsockopt函式中設定套接字選項SO_REUSEADDR,允許多個套接字訪問同一個本地IP位址及連線埠號。
10049 - WSAEADDRNOTAVAIL
不能分配請求的地址。API調用中指定的地址對那個函式來說無效時,就會產生這樣的錯誤。例如,若在bind調用中指定一個IP位址,但卻沒有對應的本地IP接口,便會產生這樣的錯誤。另外,通過connect、WSAConnect、sendto、WSASendTo和WSAJoinLeaf這四個函式為準備連線的遠程計算機指定連線埠0時,也會產生這樣的錯誤。
10050 - WSAENETDOWN
網路斷開。試圖採取一項操作時,卻發現網路連線中斷。這可能是由於網路堆疊的錯誤,網路接口的故障,或者本地網路的問題造成的。
10051 - WSAENETUNREACH
網路不可抵達。試圖採取一項操作時,卻發現目標網路不可抵達(不可訪問)。這意味著本地主機不知道如何抵達一個遠程主機。換言之,目前沒有已知的路由可抵達那個目標主機。
10052 - WSAENETRESET
網路重設時斷開了連線。由於“保持活動”操作檢測到一個錯誤,造成網路連線的中斷。
若在一個已經無效的連線之上,通過setsockopt函式設定SO_KEEPALIVE選項,也會出現這樣的錯誤。
10053 - WSAECONNABORTED
軟體造成連線取消。由於軟體錯誤,造成一個已經建立的連線被取消。典型情況下,這意味著連線是由於協定或逾時錯誤而被取消的。
10054 - WSAECONNRESET
連線被對方重設。一個已經建立的連線被遠程主機強行關閉。若遠程主機上的進程異常中止運行(由於記憶體衝突或硬體故障),或者針對套接字執行了一次強行關閉,便會產生這樣的錯誤。針對強行關閉的情況,可用SO_LINGER套接字選項和setsockopt來配置一個套接字。
10055 - WSAENOBUFS
沒有緩衝區空間。由於系統缺少足夠的緩衝區空間,請求的操作不能執行。
10056 - WSAEISCONN
套接字已經連線。表明在一個已建立連線的套接字上,試圖再建立一個連線。要注意的是,數據報和數據流套接字均有可能出現這樣的錯誤。使用數據報套接字時,假如事先已通過connect或WSAConnect調用,為數據報通信關聯了一個端點的地址,那么以後試圖再次調用sendto或WSASendTo,便會產生這樣的錯誤。
10057 - WSAENOTCONN
套接字尚未連線。若在一個尚未建立連線的“面向連線”套接字上發出數據收發請求,便會產生這樣的錯誤。
10058 - WSAESHUTDOWN
套接字關閉後不能傳送。表明已通過對shutdown的一次調用,部分關閉了套接字,但事後又請求進行數據的收發操作。要注意的是,這種錯誤只會在已經關閉的那個數據流動方向上才會發生。舉個例子來說,完成數據傳送後,若調用shutdown,那么以後任何數據傳送調用都會產生這樣的錯誤。
10060 - WSAETIMEDOUT
連線逾時。若發出了一個連線請求,但經過規定的時間,遠程計算機仍未作出正確的回響(或根本沒有任何回響),便會發生這樣的錯誤。要想收到這樣的錯誤,通常需要先在套接字上設定好SO_SNDTIMEO和SO_RCVTIMEO選項,然後調用connect及WSAConnect函式。
要想了解在套接字上設定SO_SNDTIMEO和SO_RCVTIMEO選項的詳情,可參考第9章。
10061 - WSAECONNREFUSED
連線被拒。由於被目標機器拒絕,連線無法建立。這通常是由於在遠程機器上,沒有任何應用程式可在那個地址之上,為連線提供服務。
10064 - WSAEHOSTDOWN
主機關閉。這個錯誤指出由於目標主機關閉,造成操作失敗。然而,應用程式此時更有可能收到的是一條WSAETIMEDOUT(連線逾時)錯誤,因為對方關機的情況通常是在試圖建立一個連線的時候發生的。
10065 - WSAEHOSTUNREACH
沒有到主機的路由。應用程式試圖訪問一個不可抵達的主機。該錯誤類似於WSAENETUNREACH。
10067 - WSAEPROCLIM
進程過多。有些Winsock服務提供者對能夠同時訪問它們的進程數量進行了限制。
10091 - WSASYSNOTREADY
網路子系統不可用。調用WSAStartup時,若提供者不能正常工作(由於提供服務的基層系統不可用),便會返回這種錯誤。
10092 - WSAVERNOTSUPPORTED
Winsock.dll版本有誤。表明不支持請求的Winsock提供者版本。
10093 - WSANOTINITIALISED
Winsock尚未初始化。尚未成功完成對WSAStartup的一次調用。
10101 - WSAEDISCON
正在從容關閉。這個錯誤是由WSARecv和WSARecvFrom返回的,指出遠程主機已初始化了一次從容關閉操作。該錯誤是在像ATM這樣的“面向訊息”協定上發生的。
10102 - WSAENOMORE
找不到更多的記錄。這個錯誤自WSALookupServiceNext函式返回,指出已經沒有留下更多的記錄。這個錯誤通常可與WSA_E_NO_MORE互換使用。在應用程式中,應同時檢查這個錯誤以及WSA_E_NO_MORE。
10103 - WSAECANCELLED
操作被取消。這個錯誤指出當WSALookupServiceNext調用仍在處理期間,發出了對WSALookupServiceEnd(服務中止)的一個調用。此時,WSALookupServiceNext便會返回這個錯誤。這個錯誤代碼可與WSA_E_CANCELLED互換使用。作為應用程式,應同時檢查這個錯誤以及WSA_E_CANCELLED
10105 - WSAEINVALIDPROVIDER
無效的服務提供者。這個錯誤同服務提供者關聯在一起,在提供者不能建立正確的Winsock版本,從而無法正常工作的前提下產生。
10106 - WSAEPROVIDERFAILEDINIT
提供者初始化失敗。這個錯誤同服務提供者關聯在一起,通常見於提供者不能載入需要的DLL時。
10107 - WSASYSCALLFAILURE
系統調用失敗。表明絕對不應失敗的一個系統調用卻令人遺憾地失敗了。
10108 - WSASERVICE_NOT_FOUND
找不到這樣的服務。這個錯誤通常與註冊和名字解析函式相關,在查詢服務時產生(第10章對這些函式進行了詳盡解釋)。該錯誤表明,在給定的名字空間內,找不到請求的服務。
10109 - WSATYPE_NOT_FOUND
找不到類的類型。該錯誤也與註冊及名字解析函式關聯在一起,在處理服務類(Service Class)時發生。若註冊好一個服務的實例,它必須引用一個以前通過WSAInstallServiceClass安裝好的服務。
10110 - WSA_E_NO_MORE
找不到更多的記錄。這個錯誤是自WSALookupServiceNext調用返回的,指出已經沒有剩
下的記錄。該錯誤通常可與WSAENOMORE互換使用。作為一個應用程式,應同時檢查這個
錯誤以及WSAENOMORE。
10111 - WSA_E_CANCELLED
操作被取消。該錯誤指出在對WSALookupServiceNext的調用尚未完成的時候,又發出了對WSALookupServiceEnd(中止服務)的一個調用。這樣,WSALookupServiceNext就會返回該錯誤。這個錯誤代碼可與WSAECANCELLED互換使用。作為一個應用程式,應同時檢查這個錯誤以及WSAECANCELLED。
10112 - WSAEREFUSED
查詢被拒。由於被主動拒絕,所以一個資料庫查詢操作失敗。
11001 - WSAHOST_NOT_FOUND
主機沒有找到。這個錯誤是在調用gethostbyname和gethostbyaddr時產生的,表明沒有找到一個授權應答主機(AuthoritativeAnswerHost)。
11002 - WSATRY_AGAIN
非授權主機沒有找到。這個錯誤也是在調用gethostbyname和gethostbyaddr時產生的,表明沒有找到一個非授權主機,或者遇到了伺服器故障。
11003 - WSANO_RECOVERY
遇到一個不可恢復的錯誤。這個錯誤也是在調用gethostbyname和gethostbyaddr時產生的,指出遇到一個不可恢復的錯誤,應再次嘗試操作。
11004 - WSANO_DATA
沒有找到請求類型的數據記錄。這個錯誤也是在調用gethostbyname和gethostbyaddr時產生的,指出儘管提供的名字有效,但卻沒有找到與請求類型對應的數據記錄。
11005 - WSA_QOS_RECEIVERS
至少有一條預約訊息抵達。這個值同IP服務質量(QoS)有著密切的關係,其實並不是一個真正的“錯誤”(QoS的詳情見第12章)。它指出網路上至少有一個進程希望接收QoS通信。
11006 - WSA_QOS_SENDERS
至少有一條路徑訊息抵達。這個值同QoS關聯在一起,其實更像一種狀態報告訊息。它指出在網路上,至少有一個進程希望進行QoS數據的傳送。
11007 - WSA_QOS_NO_SENDERS
沒有QoS傳送者。這個值同QoS關聯在一起,指出不再有任何進程對QoS數據的傳送有興趣。請參閱第12章,了解在發生這樣的錯誤時,對所發生情況的一系列完整說明。
11008 - WSA_QOS_NO_RECEIVERS
沒有QoS接收者。這個值同QoS關聯在一起,指出不再有任何進程對QoS數據的接收有興趣。請參閱第12章,查閱對這個錯誤的完整說明。
11009 - WSA_QOS_REQUEST_CONFIRMED
預約請求已被確認。QoS套用可事先發出請求,希望在批准了自己對網路頻寬的預約請求後,收到通知。若發出了這樣的請求,一旦批准,便會收到這樣的訊息。請參閱第12章,了解對此訊息的詳細說明。
11010 - WSA_QOS_ADMISSION_FAILURE
缺乏資源致錯。資源不夠,以至於無法滿足QoS頻寬請求。
11011 - WSA_QOS_POLICY_FAILURE
證書無效。表明發出QoS預約請求的時候,要么用戶並不具備正確的許可權,要么提供的證書無效。
11012 - WSA_QOS_BAD_STYLE
未知或衝突的樣式。QoS應用程式可針對一個指定的會話,建立不同的過濾器樣式。若出現這一錯誤,表明指定的樣式類型要么未知,要么存在衝突。請參閱第12章,了解對過濾器樣式的詳細說明。
11013 - WSA_QOS_BAD_OBJECT
無效的FILTERSPEC結構或者提供者特有對象。假如為QoS對象提供的FILTERSPEC結構無效,或者提供者特有的緩衝區無效,便會返回這樣的錯誤,詳見第12章。
11014 - WSA_QOS_TRAFFIC_CTRL_ERROR
FLOWSPEC有問題。假如通信控制組件發現指定的FLOWSPEC參數存在問題(作為QoS對象的一個成員傳遞),便會返回這樣的錯誤。
11015 - WSA_QOS_GENERIC_ERROR
常規QoS錯誤。這是一個比較泛泛的錯誤;假如其他QoS錯誤都不適合,便返回這個錯誤。

相關詞條

熱門詞條

聯絡我們