常见socket错误返回码

常见socket错误返回码

ID:17949724

大小:48.50 KB

页数:27页

时间:2018-09-11

常见socket错误返回码_第1页
常见socket错误返回码_第2页
常见socket错误返回码_第3页
常见socket错误返回码_第4页
常见socket错误返回码_第5页
资源描述:

《常见socket错误返回码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、常见SOCKET错误返回码(转)WSAEINTR(10004)被中断的系统呼叫当以阻拦式进行的WinSock函式被WSACancelBlockingCall()中断的时候,这个阻拦式函式会得到WSAEINTR这个错误讯息。读者要注意的是,当你的程式有用WSACancelBlockingCall去中断阻拦式函式的时候,你必须为这个阻拦式函式写处理WSAEINTR错误讯息的程式码,否则你的程式可能会出现些无预期的错误。原则上,所有能以阻拦式进行的函式都可能会发生这个错误。WSAEBADF(10009)

2、错误的档案代码柏克莱socket介面中,档案描述子和socket描述子是相通的,开启socket可以想像成开启一个档案。WSAEBADF在柏克莱socket介面的意义是指错误的socket描述子,这个错误的socket描述子可能是未经开启的socket或是以关闭的socket。在WinSock中有个相通的错误代码WSAENOTSOCK,用来指定错误的socket描述子。详细说明请参考WSAENOTSOCK部分。WSAEACCES(10013)无此权限对于柏克莱socket介面函式,这个错误发生的原

3、因通常是开启一个不具有开启权限的档案或socket。例如在UNIX上,一般的使用者不能开启SOCK_RAW的socket,通常是超级使用者(superuser)才有此权限。如果一般的使用者企图开启SOCK_RAW的socket,将会得到这个错误讯息。对于WinSockAPI函式介面,发生此错误的函式有二:send()和sendto()。当利用send()或sendto()传送资料的时候,将目的位址设成广播位址(broadcastaddress),但是并未呼叫setsockopt()设定SO_BRO

4、ADCAST选项时便会发生WSAEACCES错误。WSAEFAULT(10014)错误的记忆体位址系统侦测出使用错误的记忆体位址。呼叫WinSock函式时,常常会有参数是以指标的方式传入,这个指标可能是指向一个结构,如sockaddr_in结构,或是指向一个资料缓冲区。当程式不小心传入一个错误记忆体未指的指标时,就会发生WSAEFAULT这个错误。此外,当指标所指向的记忆体区块太小的时候,也会发生这个错误。WSAEINVAL(10022)参数错误如果传入不正确的参数给WinSock函式的话,会导致

5、WSAEINVAL这个错误。如果参数是一个结构的指标,此结构内容填入不正确的值,也会导致这个错误。例如,shutdown()函式的how()参数只能是0、1或2,若是设定成其他数值,就会出现这个错误。在网路程式的设计中,函式和函式之间的呼叫通常有一定的顺序,如过不照这个顺序进行,也会出现这个错误。底下是针对每个相关函式的详细说明。函式错误发生的时机accept()呼叫accept()之前没有成功呼叫listen()bind()已经成功呼叫bind()函式而指定stocket的名称了getstock

6、name()没有呼叫bind()函式指定socket名称listen()已经处于连接状态或是socket没有呼叫bind()函式指定socket名称recv()和recvfrom()对于datagramsocket,socket没有呼叫bind()函式指定IP位址、port和协定等;对于streamsocket,连接尚未建立send()和sendto()对于datagramsocket,socket没有呼叫bind()函式指定IP位址、port和协定等;对于streamsocket,连接尚未建立原

7、则上,所有函式其参数所能设定的值有一定的范围,或是有一些特定的值,这些函式都有可能发生这个错误。WSAEMFILE(10024)太多开启的档案柏克莱socket介面的解释是开启过多的档案,超过档案开启数的限制。在柏克莱socket将档案和socket的开启以档案描述子(filedescriptor)描述。WinSock对于socket是有别于档案的,WSAEMFILE在WinSock的意义是开启太多的socket。这个程式通常发生在同一部机器中执行过多的网路程式,以致开启过多的socket。另一种

8、可以避免的错误是应用程式没有正常的关闭不用的socket,以致socket资源耗尽。WSAEWOULDBLOCK(10035)函式作用阻拦中当函式作用是以非阻拦式进行,而此刻的函式作用再返回时其函式作用尚未完成的时候,就会出现这个错误。举例来说,假设send()以非阻拦式传送一段资料至远端主机,假设函式返回时得到WSAEWOULDBLOCK这个错误,这样表示这一段资料不能在这一次的send()函式呼叫中传送完。对于connect()函式,这个错误表示尚未成功地连接上远端主机,连接要

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。