Address Family is not supported

來源:互聯網
上載者:User

今天在用winsock時又碰到這個問題,在網上找了很多,有個解釋“

被請求的地址在它的環境中是不合法的。通常地在bind()函數試圖將一個本地機器不合法的地址綁紮到通訊端時產生。它也可能在connect()、sendto()、WSAConnect()、WSAJoinLeaf()或WSASendTo()函數調用時因遠程機器的遠程地址或連接埠號碼非法(如0地址或0連接埠號碼)而產生。”很和自己的原因,在認真看了看,發現是在設定RemoteHost時設定為空白了。下面附上Windows Sockets錯誤碼擴充描述

WSAEACCES                          (10013)             Permission denied.

試圖使用被禁止的存取權限去訪問通訊端。例如,在沒有使用函數setsockopt()的SO_BROADCAST命令設定廣播許可權的通訊端上使用函數sendto()給一個廣播位址發送資料。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

WSAEADDRINUSE                 (10048)             Address already in use.

正常情況下每一個通訊端地址(協議/IP地址/連接埠號碼)只允許使用一次。當應用程式試圖使用bind()函數將一個被已存在的或沒有完全關閉的或正在關閉的通訊端使用了的IP地址/連接埠號碼綁紮到一個新通訊端上時,該錯誤發生。對於伺服器應用程式來說,如果需要使用bind()函數將多個通訊端綁紮到同一個連接埠上,可以考慮使用setsockopt()函數的SO_REUSEADDR命令。客戶應用程式一般不必使用bind()函數——connect()函數總是自動選擇沒有使用的連接埠號碼。當bind()函數操作的是通配地址(包括ADDR_ANY)時,錯誤WSAEADDRINUSE可能延遲到一個明確的地址被提交時才發生。這可能在後續的函數如connect()、listen()、WSAConnect()或WSAJoinLeaf()調用時發生。

 

WSAEADDRNOTAVAIL         (10049)             Cannot assign requested address.

被請求的地址在它的環境中是不合法的。通常地在bind()函數試圖將一個本地機器不合法的地址綁紮到通訊端時產生。它也可能在connect()、sendto()、WSAConnect()、WSAJoinLeaf()或WSASendTo()函數調用時因遠程機器的遠程地址或連接埠號碼非法(如0地址或0連接埠號碼)而產生。

 

WSAEAFNOSUPPORT            (10047)             Address family not supported by protocol family.

使用的地址與被請求的協議不相容。所有的通訊端在建立時都與一個地址族(如IP協議對應的AF_INET)和一個通用的協議類型(如SOCK_STREAM)聯絡起來。如果在socket()調用中明確地要求一個不正確的協議,或在調用sendto()等函數時使用了對通訊端來說是錯誤的地址族的地址,該錯誤返回。

 

WSAEALREADY                    (10037)             Operation already in progress.

當在非阻塞通訊端上已經有一個操作進行中時,又有一個操作試圖在其上執行則產生此錯誤。如:在一個進行中串連的非阻塞通訊端上第二次調用connect()函數;或取消一個已經被取消或已完成的非同步請求(WSAAsyncGetXbyY())。

 

WSAECONNABORTED           (10053)             Software caused connection abort.

一個已建立的串連被你的主機上的軟體終止,可能是因為一次資料轉送逾時或是協議錯誤。

 

WSAECONNREFUSED            (10061)             Connection refused.

因為目標主機主動拒絕,串連不能建立。這通常是因為試圖串連到一個遠程主機上不活動的服務,如沒有伺服器應用程式處於執行狀態。

 

WSAECONNRESET                (10054)             Connection reset by peer.

存在的串連被遠程主機強制關閉。通常原因為:遠程主機上對等方應用程式突然停止運行,或遠程主機重新啟動,或遠程主機在遠程方通訊端上使用了“強制”關閉(參見setsockopt(SO_LINGER))。另外,在一個或多個操作進行中時,如果串連因“keep-alive”活動檢測到一個失敗而中斷,也可能導致此錯誤。此時,進行中的操作以錯誤碼WSAENETRESET失敗返回,後續操作將失敗返回錯誤碼WSAECONNRESET。

 

WSAEDESTADDRREQ           (10039)             Destination address required.

在通訊端上一個操作所必須的地址被遺漏。例如,如果sendto()函數被調用且遠程地址為ADDR_ANY時,此錯誤被返回。

 

WSAEFAULT                          (10014)             Bad address.

系統檢測到調用試圖使用的一個指標參數指向的是一個非法指標地址。如果應用程式傳遞一個非法的指標值,或緩衝區長度太小,此錯誤發生。例如,參數為結構sockaddr,但參數的長度小於sizeof(struct sockaddr)。

 

WSAEHOSTDOWN                 (10064)             Host is down.

通訊端操作因為目的主機關閉而失敗返回。通訊端操作遇到不活動主機。本地主機上的網路活動沒有初始化。這些條件由錯誤碼WSAETIMEDOUT指示似乎更合適。

 

WSAEHOSTUNREACH           (10065)             No route to host.

試圖和一個不可達主機進行通訊端操作。參見WSAENETUNREACH。

 

WSAEINPROGRESS               (10036)             Operation now in progress.

一個阻塞操作正在執行。Windows Sockets只允許一個任務(或線程)在同一時間可以有一個未完成的阻塞操作,如果此時調用了任何函數(不管此函數是否引用了該通訊端或任何其它通訊端),此函數將以錯誤碼WSAEINPROGRESS返回。

 

WSAEINTR                            (10004)             Interrupted function call.

阻塞操作被函數WSACancelBlockingCall ()調用所中斷。

 

WSAEINVAL                           (10022)             Invalid argument.

提供了非法參數(例如,在使用setsockopt()函數時指定了非法的level)。在一些執行個體中,它也可能與通訊端的目前狀態相關,例如,在通訊端沒有使用listen()使其處於監聽時調用accept()函數。

 

WSAEISCONN                        (10056)             Socket is already connected.

串連請求發生在已經串連的通訊端上。一些實現對於在已串連SOCK_DGRAM通訊端上使用sendto()函數的情況也返回此錯誤(對於SOCK_STREAM通訊端,sendto()函數的to參數被忽略),儘管其它一些實現將此操作視為合法事件。

 

WSAEMFILE                          (10024)             Too many open files.

開啟了太多的通訊端。不管是對整個系統還是每一進程或線程,Windows Sockets實現都可能有一個最大可用的通訊端控制代碼數。

 

WSAEMSGSIZE                      (10040)             Message too long.

在資料通訊端上發送的一個訊息大於內部訊息緩衝區或一些其它網路限制,或者是用來接受資料報的緩衝區小於資料報本身。

 

WSAENETDOWN                    (10050)             Network is down.

通訊端操作遇到一個不活動的網路。此錯誤可能指示網路系統(例如WinSock DLL啟動並執行協議棧)、網路介面或本網本身發生了一個嚴重的失敗。

 

WSAENETRESET                   (10052)             Network dropped connection on reset.

在操作進行中時串連因“keep-alive”檢測到失敗而中斷。也可能由setsockopt()函數返回,如果試圖使用它在一個已經失敗的串連上設定SO_KEEPALIVE。

 

WSAENETUNREACH              (10051)             Network is unreachable.

試圖和一個無法到達的網路進行通訊端操作。它常常意味著本地軟體不知道到達遠程主機的路由。

 

WSAENOBUFS                        (10055)             No buffer space available.

由於系統缺乏足夠的緩衝區空間,或因為隊列已滿,在通訊端上的操作無法執行。

 

WSAENOPROTOOPT             (10042)             Bad protocol option.

在getsockopt()或setsockopt()調用中,指定了一個未知的、非法的或不支援的選項或層(level)。

 

WSAENOTCONN                    (10057)             Socket is not connected.

因為通訊端沒有串連,發送或接收資料的請求不被允許,或者是使用sendto()函數在資料通訊端上發送時沒有提供地址。任何其它類型的操作也可以返回此錯誤,例如,使用setsockopt()函數在一個已重設的串連上設定SO_KEEPALIVE。

 

WSAENOTSOCK                    (10038)             Socket operation on non-socket.

操作試圖不是在通訊端上進行。它可能是通訊端控制代碼參數沒有引用到一個合法通訊端,或者是調用select()函數時,一個fd_set中的成員不合法。

 

WSAEOPNOTSUPP                (10045)             Operation not supported.

對於引用的對象的類型來說,試圖進行的操作不支援。通常它發生在通訊端不支援此操作的通訊端描述符上,例如,試圖在資料通訊端上接收串連。

 

WSAEPFNOSUPPORT            (10046)             Protocol family not supported.

協議簇沒有在系統中配置或沒有支援它的實現存在。它與WSAEAFNOSUPPORT有些微的不同,但在絕大多數情況下是可互換的,返回這兩個錯誤的所有Windows Sockets函數的說明見WSAEAFNOSUPPORT的描述。

 

WSAEPROCLIM                     (10067)             Too many processes.

Windows Sockets實現可能限制同時使用它的應用程式的數量,如果達到此限制,WSAStartup()函數可能因此錯誤失敗。

 

WSAEPROTONOSUPPORT     (10043)             Protocol not supported.

請求的協議沒有在系統中配置或沒有支援它的實現存在。例如,socket()調用請求一個SOCK_DGRAM通訊端,但指定的是流協議。

 

WSAEPROTOTYPE                (10041)             Protocol wrong type for socket.

在socket()函數調用中指定的協議不支援要求的通訊端類型的語義。例如,ARPA Internet UDP協議不能和SOCK_STREAM通訊端類型一同指定。

 

WSAESHUTDOWN                 (10058)             Cannot send after socket shutdown.

因為通訊端在相應方向上已經被先前的shutdown()調用關閉,因此該方向上的發送或接收請求不被允許。通過調用shutdown()函數來請求對通訊端的部分關閉,它發送一個訊號來停止發送或接收或雙向操作。

 

WSAESOCKTNOSUPPORT    (10044)             Socket type not supported.

不支援在此地址族中指定的通訊端類型。例如,socket()調用中選擇了可選的通訊端類型SOCK_RAW,但是實現卻根本不支援SOCK_RAW類型的通訊端。

 

WSAETIMEDOUT                   (10060)             Connection timed out.

串連請求因被串連方在一個時間周期內不能正確響應而失敗,或已經建立的串連因被串連的主機不能響應而失敗。

 

WSATYPE_NOT_FOUND        (10109)             Class type not found

     指定的類沒有找到。

 

WSAEWOULDBLOCK           (10035)             Resource temporarily unavailable.

此錯誤由在非阻塞通訊端上不能立即完成的操作返回,例如,當通訊端上沒有排隊資料可讀時調用了recv()函數。此錯誤不是嚴重錯誤,相應操作應該稍後重試。對於在非阻塞SOCK_STREAM通訊端上調用connect()函數來說,報告WSAEWOULDBLOCK是正常的,因為建立一個串連必須花費一些時間。

 

WSAHOST_NOT_FOUND        (11001)             Host not found.

主機未知。此名字不是一個正式主機名稱,也不是一個別名,它不能在查詢的資料庫中找到。此錯誤也可能在協議和服務查詢中返回,它意味著指定的名字不能在相關資料庫中找到。

 

WSA_INVALID_HANDLE        (OS dependent) Specified event object handle is invalid.

應用程式試圖使用一個事件對象,但指定的控制代碼非法。

 

WSA_INVALID_PARAMETER (OS dependent) One or more parameters are invalid.

應用程式使用了一個直接映射到Win32函數的WinSock函數,而Win32函數指示一個或多個參數有問題。

 

WSAINVALIDPROCTABLE    (OS dependent)      Invalid procedure table from service provider.

服務提供者返回了一個假的WS2_32.DLL程式(procedure)表。這通常是由一個或多個函數指標為空白引起。

 

WSAINVALIDPROVIDER        (OS dependent)      Invalid service provider version number.

     服務提供者返回一個不同於2.2的版本號碼。

 

WSA_IO_INCOMPLETE         (OS dependent) Overlapped I/O event object not in signaled state.

應用程式試圖檢測一個沒有完成的重疊操作的狀態。應用程式使用函數WSAGetOverlappedResult()(參數fWait設定為false)以輪詢模式檢測一個重疊操作是否完成時將得到此錯誤碼,除非該操作已經完成。

 

WSA_IO_PENDING                 (OS dependent) Overlapped operations will complete later.

應用程式已經初始化了一個不能立即完成的重疊操作。當稍後此操作完成時將有完成指示。

 

WSA_NOT_ENOUGH_MEMORY  (OS dependent)       Insufficient memory available.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.