windowssocket错误码及出错原因

上传人:xiao****1972 文档编号:84906288 上传时间:2019-03-05 格式:DOC 页数:17 大小:177.50KB
返回 下载 相关 举报
windowssocket错误码及出错原因_第1页
第1页 / 共17页
windowssocket错误码及出错原因_第2页
第2页 / 共17页
windowssocket错误码及出错原因_第3页
第3页 / 共17页
windowssocket错误码及出错原因_第4页
第4页 / 共17页
windowssocket错误码及出错原因_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《windowssocket错误码及出错原因》由会员分享,可在线阅读,更多相关《windowssocket错误码及出错原因(17页珍藏版)》请在金锄头文库上搜索。

1、windows socket错误码及出错原因编程 2009-11-01 14:33:21 阅读1890 评论0 字号:大中小订阅 本文转自http:/ Sockets在头文件winsock.h中定义了所有的错误码,它们包括以“WSA”打头的Windows Sockets实现返回的错误码和Berkeley Sockets定义的错误码全集。定义Berkeley Sockets错误码是为了确保原有软件的可移植性。 A.1 Windows Sockets错误码列表 表A.1列出了WSAGetLastError()函数返回的可能错误码和它们的解释,它们可分为四个部分。 错误码的第一部分是用来解决在不同的

2、C编译中对标准C错误码的不一致的定义。错误码的第二部分是标准Berkeley Sockets错误码的Windows Sockets版本。错误码的第三部分包括特定Windows Sockets扩充的错误码。错误码的第四部分由Windows Sockets的getXbyY()和WSAAsyncGetXByY()函数返回,相当于Berkeley软件中由变量h_errno返回的错误(事实上,Windows Sockets在头文件winsock.h中已将h_error定义成其值为WSAGetLastError()的一个宏),它们相当于由域名服务(Domain Name Service)返回的各种失败。如

3、果Windows Sockets实现没有使用域名服务,它将使用最合适的代码。一般地,Windows Sockets应用程序应该将错误WSAHOST_NOT_FOUND和WSANO_DATA解释为指示关键字(名字,地址等)没有找着,而错误 WSATRY_AGAIN和WSANO_RECOVERY是提醒名字服务自身是非操作的。 错误码由Windows Sockets 规范定义,在所有同一版本规范的Windows Sockets兼容实现中,它们是一致的。表A.1 Windows Sockets错误码Windows Sockets错误码Berkeley 对应错误码错误号 解 释WSAEINTREINTR

4、10004同标准CWSAEBADFEBADF10009同标准CWSAEACCESEACCES10013同标准CWSAEFAULTEFAULT10014同标准CWSAEINVALEINVAL10022同标准CWSAEMFILEEMFILE10024同标准CWSAEWOULDBLOCKEWOULDBLOCK10035同BSDWSAEINPROGRESSEINPROGRESS10036当一个阻塞函数正在进行时,调用任何Windows Sockets API函数均返回此错误WSAEALREADYEALREADY10037同BSDWSAENOTSOCKENOTSOCK10038同BSDWSAEDESTA

5、DDRREQEDESTADDRREQ10039同BSDWSAEMSGSIZEEMSGSIZE10040同BSDWSAEPROTOTYPEEPROTOTYPE10041同BSDWSAENOPROTOOPTENOPROTOOPT10042同BSDWSAEPROTONOSUPPORTEPROTONOSUPPORT10043同BSDWSAESOCKTNOSUPPORTESOCKTNOSUPPORT10044同BSDWSAEOPNOTSUPPEOPNOTSUPP10045同BSDWSAEPFNOSUPPORTEPFNOSUPPORT10046同BSDWSAEAFNOSUPPORTEAFNOSUPPORT

6、10047同BSDWSAEADDRINUSEEADDRINUSE10048同BSDWSAEADDRNOTAVAILEADDRNOTAVAIL10049同BSDWSAENETDOWNENETDOWN10050同BSD。任何时候只要Windows Sockets实现检测到网络子系统失败,它就报告此错误。WSAENETUNREACHENETUNREACH10051同BSDWSAENETRESETENETRESET10052同BSDWSAECONNABORTEDECONNABORTED10053同BSDWSAECONNRESETECONNRESET10054同BSDWSAENOBUFSENOBUFS1

7、0055同BSDWSAEISCONNEISCONN10056同BSDWSAENOTCONNENOTCONN10057同BSDWSAESHUTDOWNESHUTDOWN10058同BSDWSAETOOMANYREFSETOOMANYREFS10059同BSDWSAETIMEDOUTETIMEDOUT10060同BSDWSAECONNREFUSEDECONNREFUSED10061同BSDWSAELOOPELOOP10062同BSDWSAENAMETOOLONGENAMETOOLONG10063同BSDWSAEHOSTDOWNEHOSTDOWN10064同BSDWSAEHOSTUNREACHEHO

8、STUNREACH10065同BSDWSASYSNOTREADY10091由WSAStartup() 返回,指示网络子系统无法使用。WSAVERNOTSUPPORTED10092由WSAStartup() 返回,指示Windows SocketsDLL 不能支持此应用程序。WSANOTINITIALISED10093由除WSAStartup()之外的其它函数返回,指示 尚没有一次成功的WSAStartup() 调用执行过。WSAEDISCON10101由WSARecv()和WSARecvFrom()返回,指示远程方已经初始化了一个“雅致”的shutdown序列。WSAHOST_NOT_FOUN

9、DHOST_NOT_FOUND11001同BSDWSATRY_AGAINTRY_AGAIN11002同BSDWSANO_RECOVERYNO_RECOVERY11003同BSDWSANO_DATANO_DATA11004同BSDA.2 Windows Sockets错误码扩展描述 下面给出WSAGetLastError()函数返回的可能错误码按字母顺序排列的列表,同时给出简要的扩展描述。WSAEACCES (10013) Permission denied. 试图使用被禁止的访问权限去访问套接字。例如,在没有使用函数setsockopt()的SO_BROADCAST命令设置广播权限的套接字上使

10、用函数sendto()给一个广播地址发送数据。WSAEADDRINUSE (10048) Address already in use. 正常情况下每一个套接字地址(协议IP地址端口号)只允许使用一次。当应用程序试图使用bind()函数将一个被已存在的或没有完全关闭的或正在关闭的套接字使用了的IP地址端口号绑扎到一个新套接字上时,该错误发生。对于服务器应用程序来说,如果需要使用bind()函数将多个套接字绑扎到同一个端口上,可以考虑使用setsockopt()函数的SO_REUSEADDR命令。客户应用程序一般不必使用bind()函数 connect()函数总是自动选择没有使用的端口号。当bi

11、nd()函数操作的是通配地址(包括ADDR_ANY)时,错误WSAEADDRINUSE 可能延迟到一个明确的地址被提交时才发生。这可能在后续的函数如connect()、listen()、WSAConnect()或 WSAJoinLeaf()调用时发生。WSAEADDRNOTAVAIL (10049) Cannot assign requested address. 被请求的地址在它的环境中是不合法的。通常地在bind()函数试图将一个本地机器不合法的地址绑扎到套接字时产生。它也可能在 connect()、sendto()、WSAConnect()、WSAJoinLeaf()或WSASendTo

12、()函数调用时因远程机器的远程地址或端口号非法(如0地址或0端口号)而产生。WSAEAFNOSUPPORT (10047) Address family not supported by protocol family. 使用的地址与被请求的协议不兼容。所有的套接字在创建时都与一个地址族(如IP协议对应的AF_INET)和一个通用的协议类型(如 SOCK_STREAM)联系起来。如果在socket()调用中明确地要求一个不正确的协议,或在调用sendto()等函数时使用了对套接字来说是错误的地址族的地址,该错误返回。WSAEALREADY (10037) Operation already i

13、n progress. 当在非阻塞套接字上已经有一个操作正在进行时,又有一个操作试图在其上执行则产生此错误。如:在一个正在进行连接的非阻塞套接字上第二次调用connect()函数;或取消一个已经被取消或已完成的异步请求(WSAAsyncGetXbyY())。WSAECONNABORTED (10053) Software caused connection abort. 一个已建立的连接被你的主机上的软件终止,可能是因为一次数据传输超时或是协议错误。WSAECONNREFUSED (10061) Connection refused. 因为目标主机主动拒绝,连接不能建立。这通常是因为试图连接到

14、一个远程主机上不活动的服务,如没有服务器应用程序处于执行状态。WSAECONNRESET (10054) Connection reset by peer. 存在的连接被远程主机强制关闭。通常原因为:远程主机上对等方应用程序突然停止运行,或远程主机重新启动,或远程主机在远程方套接字上使用了“ 强制”关闭(参见setsockopt(SO_LINGER))。另外,在一个或多个操作正在进行时,如果连接因“keep-alive”活动检测到一个失败而中断,也可能导致此错误。此时,正在进行的操作以错误码WSAENETRESET失败返回,后续操作将失败返回错误码WSAECONNRESET。WSAEDESTADDRREQ (10039)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号