ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:26.09KB ,
资源ID:5239292      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5239292.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(socket常见错误代码解析.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

socket常见错误代码解析.docx

1、socket常见错误代码解析socket常见错误代码解析Socket error 0 - Directly send error Socket error 10004 - Interrupted function call Socket error 10013 - Permission denied Socket error 10014 - Bad address Socket error 10022 - Invalid argument Socket error 10024 - Too many open files Socket error 10035 - Resource tempora

2、rily unavailable Socket error 10036 - Operation now in progress Socket error 10037 - Operation already in progress Socket error 10038 - Socket operation on non-socket Socket error 10039 - Destination address required Socket error 10040 - Message too long Socket error 10041 - Protocol wrong type for

3、socket Socket error 10042 - Bad protocol option Socket error 10043 - Protocol not supported Socket error 10044 - Socket type not supported Socket error 10045 - Operation not supported Socket error 10046 - Protocol family not supported Socket error 10047 - Address family not supported by protocol fam

4、ily Socket error 10048 - Address already in use Socket error 10049 - Cannot assign requested address Socket error 10050 - Network is down Socket error 10051 - Network is unreachable Socket error 10052 - Network dropped connection on reset Socket error 10053 - Software caused connection abort Socket

5、error 10054 - Connection reset by peer Socket error 10055 - No buffer space available Socket error 10056 - Socket is already connected Socket error 10057 - Socket is not connected Socket error 10058 - Cannot send after socket shutdown Socket error 10060 - Connection timed out Socket error 10061 - Co

6、nnection refused Socket error 10064 - Host is down Socket error 10065 - No route to host Socket error 10067 - Too many processes Socket error 10091 - Network subsystem is unavailable Socket error 10092 - WINSOCK.DLL version out of range Socket error 10093 - Successful WSAStartup not yet performed So

7、cket error 10094 - Graceful shutdown in progress Socket error 11001 - Host not found Socket error 11002 - Non-authoritative host not found Socket error 11003 - This is a non-recoverable error Socket error 11004 - Valid name, no data record of requested type WSAEADDRINUSE (10048) Address already in u

8、se WSAECONNABORTED (10053) Software caused connection abort WSAECONNREFUSED (10061) Connection refused WSAECONNRESET (10054) Connection reset by peer WSAEDESTADDRREQ (10039) Destination address required WSAEHOSTUNREACH (10065) No route to host WSAEMFILE (10024) Too many open files WSAENETDOWN (10050

9、) Network is down WSAENETRESET (10052) Network dropped connection WSAENOBUFS (10055) No buffer space available WSAENETUNREACH (10051) Network is unreachable WSAETIMEDOUT (10060) Connection timed out WSAHOST_NOT_FOUND (11001) Host not found WSASYSNOTREADY (10091) Network sub-system is unavailable WSA

10、NOTINITIALISED (10093) WSAStartup() not performed WSANO_DATA (11004) Valid name, no data of that type WSANO_RECOVERY (11003) Non-recoverable query error WSATRY_AGAIN (11002) Non-authoritative host found WSAVERNOTSUPPORTED (10092) Wrong WinSock DLL version + + 常見SOCKET錯誤返回碼WSAEINTR (10004)被中斷的系統呼叫 當

11、以阻攔式進行的WinSock函式被WSACancelBlockingCall()中斷的時候,這個阻攔式函式會得到WSAEINTR這個錯 誤訊息。讀者要注意的是,當你的程序有用WSACancelBlockingCall去中斷阻攔式函式的時候,你必須為這個阻攔式函式寫處理 WSAEINTR錯誤訊息的程序代碼,否則你的程序可能會出現些無預期的錯誤。 原則上,所有能以阻攔式進行的函式都可能會發生這個錯誤。 WSAEBADF (10009)錯誤的檔案代碼 柏 克萊socket接口中,檔案描述子和socket描述子是相通的,開啟socket可以想像成開啟一個檔案。 WSAEBADF在柏克萊socket界面

12、的意義是指錯誤的socket描述子,這個錯誤的socket描述子可能是未經開啟的socket或是以關閉的 socket。 在WinSock中有個相通的錯誤代碼WSAENOTSOCK,用來指定錯誤的socket描述子。詳細說明請參考WSAENOTSOCK部分。 WSAEACCES (10013)無此權限 對 於柏克萊socket接口函式,這個錯誤發生的原因通常是開啟一個不具有開啟權限的檔案或socket。例如在UNIX上,一般的使用者不能開 啟SOCK_RAW的socket,通常是超級使用者(super user)才有此權限。如果一般的使用者企圖開啟SOCK_RAW的socket,將會得到這個錯

13、誤訊息。 對於WinSock API函式接口,發生此錯誤的函式有二:send()和sendto()。當利用send()或sendto()傳送數據的時候,將目的地址設成廣播地址 ( broadcast address ),但是並未呼叫setsockopt()設定SO_BROADCAST選項時便會發生WSAEACCES錯誤。 WSAEFAULT (10014)錯誤的內存地址 系 統偵測出使用錯誤的內存地址。呼叫WinSock函式時,常常會有參數是以指標的方式傳入,這個指標可能是指向一個結構,如 sockaddr_in結構,或是指向一個數據緩衝區。當程序不小心傳入一個錯誤內存未指的指針時,就會發生W

14、SAEFAULT這個錯誤。此外,當指針所 指向的內存區塊太小的時候,也會發生這個錯誤。 WSAEINVAL (10022)參數錯誤 如果傳入不正確的參數給WinSock函式的話,會導致WSAEINVAL這個錯誤。如果參數是一個結構的指針,此結構內容填入不正確的值,也會導致這個錯誤。例如,shutdown()函式的how()參數只能是0、1或2,若是設定成其它數值,就會出現這個錯誤。 在網絡程序的設計中,函式和函式之間的呼叫通常有一定的順序,如過不照這個順序進行,也會出現這個錯誤。底下是針對每個相關函式的詳細說明。 函式 錯誤發生的時機 accept() 呼叫accept()之前沒有成功呼叫li

15、sten() bind() 已經成功呼叫bind()函式而指定stocket的名稱了 getstockname() 沒有呼叫bind()函式指定socket名稱 listen() 已經處於連接狀態或是socket沒有呼叫bind()函式指定socket名稱 recv()和recvfrom() 對於datagram socket,socket沒有呼叫bind()函式指定IP地址、port和協議等;對於stream socket,連接尚未建立 send()和sendto() 對於datagram socket,socket沒有呼叫bind()函式指定IP地址、port和協議等;對於stream s

16、ocket,連接尚未建立 原則上,所有函式其參數所能設定的值有一定的範圍,或是有一些特定的值,這些函式都有可能發生這個錯誤。 WSAEMFILE (10024)太多開啟的檔案 柏 克萊socket接口的解釋是開啟過多的檔案,超過檔案開啟數的限制。在柏克萊socket將檔案和socket的開啟以檔案描述子(file descriptor)描述。 WinSock對於socket是有別於檔案的,WSAEMFILE在WinSock的意義是開啟太多的socket。 這個程序通常發生在同一部機器中執行過多的網絡程序,以致開啟過多的socket。另一種可以避免的錯誤是應用程序沒有正常的關閉不用的socket

17、,以致socket資源耗盡。 WSAEWOULDBLOCK (10035)函式作用阻攔中 當 函式作用是以非阻攔式進行,而此刻的函式作用再返回時其函式作用尚未完成的時候,就會出現這個錯誤。舉例來說,假設send()以非阻攔式傳送 一段數據至遠程主機,假設函式返回時得到WSAEWOULDBLOCK這個錯誤,這樣表示這一段數據不能在這一次的send()函式呼叫中傳送完。 對於connect()函式,這個錯誤表示尚未成功地連接上遠程主機,連接要求正在進行中。若你的程序中有利用setsockopt()函式以SO_LINGER設定時限,在呼叫closesocket()時有可能出現這個錯誤。 對於異步的網

18、絡數據函式( WSAAsyncGetXXXXByYYYY()而言,得到WSAEWOULDBLOCK錯誤,表示要查詢的網絡數據目前無法取得。這通常是個暫時性的錯誤,應用程序可能稍後再呼叫相同的函式就會成功。 WSAEINPROGRESS (10036)有阻攔函式正在執行中 對於每個process或thread,WinSock只允許”一”個阻攔式函式的執行。如果已有阻攔式函式正在執行,而又呼叫到WinSock函式,函式會傳回WSAEINPROGRESS的錯誤。 這 個錯誤也會發生在需要長執行時間的函式,如connect()。有一種情況是這樣:當執行”非阻攔式”的connect()函式兩次,由於是非

19、 阻攔式的connect(),第一次的呼叫傳回WSAEWOULDBLOCK錯誤碼。此時要求連接動作尚未完成,第二次的connect()呼叫就會得到 WSAEINPROGRESS的錯誤。 我們的建議是在有可能發生這種錯誤的函式呼叫前加上WSAIsBlocking()判斷是否有阻攔式函式正在執行。如果有的話,我們可能需要將正在進行的阻攔式函式取消掉,或是將目前想要做的事取消掉。 WSAEALREADY (10037)函式作用已完成 這 個錯誤的意思在柏克萊socket界面和WinSock函式的解釋上有很大的差別。柏克萊socket接口的解釋是函式作用已完成;在 WinSock中,WSAEALREA

20、DY的意思是:”你想要取消的異步事件已經被取消了!”,也就是當你呼叫 WSACancelAsyncRequest()試圖去取消一個異步事件時,而該事件已被取消了。 WSAENOTSOCK (10038)非法的socket 通 常WinSock函式都要以socket描述子當參數傳入,如果這個socket描述子所代表的socket不是正確開啟的或是根本沒有開啟, 函式就會得到WSAENOTSOCK錯誤。原則上,只要以socket描述子當參數傳入的函式都有發生WSAENOSOCK錯誤的可能。 WSAEDESTADDRREQ (10039)需要對方地址 當你要傳送數據給遠程機器,必須指定對方的地址(和

21、port等等),才能正確送達。檢查看看你的應用程序是否在呼叫connect()或sendto()時,正確地填入對方的sockaddr結構。 WSAEMSGSIZE (10040)訊息太長,緩衝區無法容納 這個錯誤發生原因是由於訊息數據過大,緩衝區無法容納,這裡的緩衝區可能是使用者指定的或是系統內部用的緩衝區。會發生這個錯誤的函式有四: 函式 錯誤發生的時機 recv()、recvform() 利用datagram socket接收數據時,如果recv()、recvform()指定的緩衝區長度小於接收進來datagram,這時後過長的datagram會被丟棄並告訴函式WSAEMSGSIZE這個錯

22、誤 send()、sendto() 利用datagram socket傳送數據時,如果送出的數據緩衝區大於WinSock所能傳遞datagram的最大長度,這時send()和sendto()傳回發生WSAEMSGSIZ這個錯誤訊息 WSAEPROTOTYPE (10041)錯誤的協議型別 錯 誤產生的原因是在socket()函式呼叫時指定了WinSock不支持的協議舉例來說,你不可以在steam socket(SOCK_STREAM)設定以UDP協議傳輸(IPPRO_UDP)。 stream socket並不支持UDP通訊協議。如果你真的有心去測試的話,程序中故意如此呼叫socket():hS

23、ock=socket(AF_INET, SOCK_STREAM, IPPROTO_UDP);你會發現,這樣的socket()函式呼叫會得到WSAEPROTONOSUPPORT錯誤。這顯然不對,照理應該得到 WSAEPROTOTYPE這個錯誤才對。 WSAEPROTOTYPE這個錯誤表示指定了錯誤的協議,而所指定的協議是該地址家族(協議家族)所支持的,但不適用於socket型別。以上述的例子 來看,UDP協議是屬於AF_INET這個地址家族,但是並不能用於stream socket(SOCK_STREAM socket)上。 WSAEPROTONOSUPPORT這個錯誤表示所指定的協議是該協議家

24、族所不支持的,意思上和WSAEPROTOTYPE有點出入。 事實上,WSAEPROTOTYPE和WSAEPROTONOSUPPORT之間的差別是微乎其微的。在發展網絡程序的時候,這兩種錯誤都是代表著同一種狀況-協議指定錯誤。 總之,你永遠也沒辦法試出WSAEPROTOTYPE這個錯誤。 WSAENOPROTOOPT (10042)錯誤的協議選項(option) 這 個錯誤主要是針對getsockopt()和setsockopt()函式的。這兩個函式可以以參數設定不同的選項而有不同的作用。對於每個選 項多多少少會有些限制,如有些選項只能用在stream socket,而有些只能用在datagra

25、m socket。如果違反這些限制,就會發生這個錯誤。請看下表: SO_DONTLINGER SO_KEEPALIVE SO_LINGER SO_OOBINLINE TCP_NODELAY datagram socket ( SOCK_DGRAM )不支持這些選項 SO_DEBUG SO_DONTROUTE SO_RCVBUF SO_SNDBUF TCP_NODELAY 有些廠商的WinSock TCP/IP協議核心不支持這些選項 SO_ACCEPTCONN SO_ERROR SO_TYPE 這些選項只適用於getsockopt()函式,不能作用於setsockopt()函式 WSAEPROT

26、ONOSUPPORT (10043)不支持的協議 WinSock 協議核心不支持所指定的通訊協議。舉例來說當你用socket()函式時,第二個參數指定為SOCK_STREAM,第三個參數指定為 IPPROTO_ICMP,如此socket()呼叫會得到WSAEPROTONOSUPPORT這個錯誤。 WinSock 1。1版並不支持ICMP協議,所以呼叫socket()指定ICMP這個協議,就會發生錯誤。事實上,產生WSAEPROTONPSUPPORT錯誤的 狀況不只這樣,詳見WSAEPROTOTYPE。 WSAESOCKTNOSUPPORT (10044)不支援的socket型別 目 前使用的W

27、inSock版本不支持函式所指定的socket型別。舉例來說,完全根據WinSock 1.1版的規格書發展的WinSock協議核心,並不支持SOCK_RAW這個socket型別。在呼叫socket()函式時,地址家族選 AF_INET( PF_INET )而socket型別選SOCK_RAW的話,就會發生這個錯誤。 有些廠商發展的WinSock協議核心除了支持WinSock 1.1版的規格書所規範之外,還提供許多不同的功能。我們建議您在發展程序時,如果有必要用到這些額外的功能,請好好考慮一下和其它環境兼容性的問題。 WSAEOPNOTSUPP (10045)作用函式不支持此類socket 函

28、式作用不支持目前socket型別。舉例來說,accept()和listen()函式只能作用在連接導向的socket(stream socket),也就是stream socket上。對於recv()、 recvform()、 send()和sendto()函式,MSG_OOB也是只能用於連接導向的socket。 WSAEPFNOSUPPORT (10046)不支持的協議家族 目前的WinSock協議核心不支持所指定的協議家族。這個錯誤和WSAEAFNOSUPPORT很像,目前這個錯誤被WSAEAFNOSUPPORT所取代了,讀者可以參考WSAEAFNOSUPPORT說明部分。 WSAEAFNO

29、SUPPORT (10047)不支持的地址家族 使用協議不支持指定的地址家族。對於socket()函式,錯誤發生原因是函式轉物錯誤的參數。對於以sockaddr結構為參數的函數,錯誤發生的原因常是網絡協議不支持sockaddr結構中(sin_family成員)指定的地址家族。 WSAEADDRINUSE (10048)地址已被指定了 所 指定的”地址”正在使用中。這裡的地址是指socket的名稱,包含三部分:協議、port和IP地址。這個錯誤發生的原因通常是應用程序試圖 利用bind()函式去指定port時,此port已被其它應用程序所佔用了。這種情況發生於在同一部主機上執行兩個相同性質(指定

30、相同socket名 稱)的server程序,第二的程序會因為第一個程序先佔用某個port而得到此錯誤訊息。 還有一種常見的情況就是在撰寫client 程序時,利用bind()去指定socket的port,此舉常會有這個錯誤發生。並非不能用 bind()去指定socket的port,而是你無法確定程序執行的時候,所指定的port是否有其它程序正在使用。通常很少會在client程序中呼 叫bind()函式,一般的client程序都是讓系統幫你選一個適當的port。 此外,應用程序可以利用setsockopt()的SO_REUSEADDR選項,允許port可以重複使用,可是我們並不鼓勵這樣做。這樣可

31、能會造成TCP/IP核心在判斷應用程序上的困擾。 WSAEADDRNOTAVAIL (10049)無法指定地址 錯誤發生的原因通常是指定了該部機器不應該有的地址。這裡的地址包含三個部分:網絡協議、port和IP地址。 在 柏克萊socket接口中,呼叫bind()時,若指定的IP地址不是本地機器該有的地址,就會出現這個錯誤。在呼叫connect()或 sendto()函式時,如果sockaddr_in結構中的sin_port填”0”,如此也會導致這個錯誤(在UNXI上是 EADDRNOTAVAIL錯誤)。 對於WinSock函式,錯誤發生的時機和柏克萊socket函式類似,bind()和con

32、nect()都會導致這樣的錯誤。 對 於WinSock函式,錯誤發生的時機和柏克萊socket函式類似,bind()和connect()都會導致這樣的錯誤。 WinSock 1.1版的規格書中並沒有提到bind()函式會導致WSAEADDRNOTAVAIL錯誤,不過根據我們測試的結果,bind()也會導致這樣的錯誤。 WSAENETDOWN (10050)網絡出錯 下層的網絡系統發生問題,WinSock函式無法執行。這是一個相當嚴重的問題,這會使得幾乎所有的WinSock函式呼叫失敗。若你的WinSock函式發生錯誤,那麼請你該好好地檢查你的網絡卡,網絡卡驅動程序和你的WinSock協議核心。 WSAENETU

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1