windowssocket错误码及出错原因.docx
- 文档编号:800845
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:24
- 大小:30.15KB
windowssocket错误码及出错原因.docx
《windowssocket错误码及出错原因.docx》由会员分享,可在线阅读,更多相关《windowssocket错误码及出错原因.docx(24页珍藏版)》请在冰豆网上搜索。
windowssocket错误码及出错原因
windowssocket错误码及出错原因
编程2009-11-0114:
33:
21阅读1890评论0 字号:
大中小 订阅
本文转自
WindowsSockets在头文件winsock.h中定义了所有的错误码,它们包括以“WSA”打头的WindowsSockets实现返回的错误码和BerkeleySockets定义的错误码全集。
定义BerkeleySockets错误码是为了确保原有软件的可移植性。
A.1 WindowsSockets错误码列表
表A.1列出了WSAGetLastError()函数返回的可能错误码和它们的解释,它们可分为四个部分。
错误码的第一部分是用来解决在不同的C编译中对标准C错误码的不一致的定义。
错误码的第二部分是标准BerkeleySockets错误码的WindowsSockets版本。
错误码的第三部分包括特定WindowsSockets扩充的错误码。
错误码的第四部分由WindowsSockets的getXbyY()和WSAAsyncGetXByY()函数返回,相当于Berkeley软件中由变量h_errno返回的错误(事实上,WindowsSockets在头文件winsock.h中已将h_error定义成其值为WSAGetLastError()的一个宏),它们相当于由域名服务(DomainNameService)返回的各种失败。
如果WindowsSockets实现没有使用域名服务,它将使用最合适的代码。
一般地,WindowsSockets应用程序应该将错误WSAHOST_NOT_FOUND和WSANO_DATA解释为指示关键字(名字,地址等)没有找着,而错误WSATRY_AGAIN和WSANO_RECOVERY是提醒名字服务自身是非操作的。
错误码由WindowsSockets规范定义,在所有同一版本规范的WindowsSockets兼容实现中,它们是一致的。
表A.1 WindowsSockets错误码
WindowsSockets错误码
Berkeley对应错误码
错误号
解 释
WSAEINTR
EINTR
10004
同标准C
WSAEBADF
EBADF
10009
同标准C
WSAEACCES
EACCES
10013
同标准C
WSAEFAULT
EFAULT
10014
同标准C
WSAEINVAL
EINVAL
10022
同标准C
WSAEMFILE
EMFILE
10024
同标准C
WSAEWOULDBLOCK
EWOULDBLOCK
10035
同BSD
WSAEINPROGRESS
EINPROGRESS
10036
当一个阻塞函数正在进行时,调用任何WindowsSocketsAPI函数均返回此错误
WSAEALREADY
EALREADY
10037
同BSD
WSAENOTSOCK
ENOTSOCK
10038
同BSD
WSAEDESTADDRREQ
EDESTADDRREQ
10039
同BSD
WSAEMSGSIZE
EMSGSIZE
10040
同BSD
WSAEPROTOTYPE
EPROTOTYPE
10041
同BSD
WSAENOPROTOOPT
ENOPROTOOPT
10042
同BSD
WSAEPROTONOSUPPORT
EPROTONOSUPPORT
10043
同BSD
WSAESOCKTNOSUPPORT
ESOCKTNOSUPPORT
10044
同BSD
WSAEOPNOTSUPP
EOPNOTSUPP
10045
同BSD
WSAEPFNOSUPPORT
EPFNOSUPPORT
10046
同BSD
WSAEAFNOSUPPORT
EAFNOSUPPORT
10047
同BSD
WSAEADDRINUSE
EADDRINUSE
10048
同BSD
WSAEADDRNOTAVAIL
EADDRNOTAVAIL
10049
同BSD
WSAENETDOWN
ENETDOWN
10050
同BSD。
任何时候只要WindowsSockets实现检测到网络子系统失败,它就报告此错误。
WSAENETUNREACH
ENETUNREACH
10051
同BSD
WSAENETRESET
ENETRESET
10052
同BSD
WSAECONNABORTED
ECONNABORTED
10053
同BSD
WSAECONNRESET
ECONNRESET
10054
同BSD
WSAENOBUFS
ENOBUFS
10055
同BSD
WSAEISCONN
EISCONN
10056
同BSD
WSAENOTCONN
ENOTCONN
10057
同BSD
WSAESHUTDOWN
ESHUTDOWN
10058
同BSD
WSAETOOMANYREFS
ETOOMANYREFS
10059
同BSD
WSAETIMEDOUT
ETIMEDOUT
10060
同BSD
WSAECONNREFUSED
ECONNREFUSED
10061
同BSD
WSAELOOP
ELOOP
10062
同BSD
WSAENAMETOOLONG
ENAMETOOLONG
10063
同BSD
WSAEHOSTDOWN
EHOSTDOWN
10064
同BSD
WSAEHOSTUNREACH
EHOSTUNREACH
10065
同BSD
WSASYSNOTREADY
10091
由WSAStartup()返回,指示网络子系统无法使用。
WSAVERNOTSUPPORTED
10092
由WSAStartup()返回,指示WindowsSockets
DLL不能支持此应用程序。
WSANOTINITIALISED
10093
由除WSAStartup()之外的其它函数返回,指示尚没有一次成功的WSAStartup()调用执行过。
WSAEDISCON
10101
由WSARecv()和WSARecvFrom()返回,指示远程方已经初始化了一个“雅致”的shutdown序列。
WSAHOST_NOT_FOUND
HOST_NOT_FOUND
11001
同BSD
WSATRY_AGAIN
TRY_AGAIN
11002
同BSD
WSANO_RECOVERY
NO_RECOVERY
11003
同BSD
WSANO_DATA
NO_DATA
11004
同BSD
A.2 WindowsSockets错误码扩展描述
下面给出WSAGetLastError()函数返回的可能错误码按字母顺序排列的列表,同时给出简要的扩展描述。
WSAEACCES (10013) Permissiondenied.
试图使用被禁止的访问权限去访问套接字。
例如,在没有使用函数setsockopt()的SO_BROADCAST命令设置广播权限的套接字上使用函数sendto()给一个广播地址发送数据。
WSAEADDRINUSE (10048) Addressalreadyinuse.
正常情况下每一个套接字地址(协议/IP地址/端口号)只允许使用一次。
当应用程序试图使用bind()函数将一个被已存在的或没有完全关闭的或正在关闭的套接字使用了的IP地址/端口号绑扎到一个新套接字上时,该错误发生。
对于服务器应用程序来说,如果需要使用bind()函数将多个套接字绑扎到同一个端口上,可以考虑使用setsockopt()函数的SO_REUSEADDR命令。
客户应用程序一般不必使用bind()函数——connect()函数总是自动选择没有使用的端口号。
当bind()函数操作的是通配地址(包括ADDR_ANY)时,错误WSAEADDRINUSE可能延迟到一个明确的地址被提交时才发生。
这可能在后续的函数如connect()、listen()、WSAConnect()或WSAJoinLeaf()调用时发生。
WSAEADDRNOTAVAIL (10049) Cannotassignrequestedaddress.
被请求的地址在它的环境中是不合法的。
通常地在bind()函数试图将一个本地机器不合法的地址绑扎到套接字时产生。
它也可能在connect()、sendto()、WSAConnect()、WSAJoinLeaf()或WSASendTo()函数调用时因远程机器的远程地址或端口号非法(如0地址或0端口号)而产生。
WSAEAFNOSUPPORT (10047) Addressfamilynotsupportedbyprotocolfamily.
使用的地址与被请求的协议不兼容。
所有的套接字在创建时都与一个地址族(如IP协议对应的AF_INET)和一个通用的协议类型(如SOCK_STREAM)联系起来。
如果在socket()调用中明确地要求一个不正确的协议,或在调用sendto()等函数时使用了对套接字来说是错误的地址族的地址,该错误返回。
WSAEALREADY (10037) Operationalreadyinprogress.
当在非阻塞套接字上已经有一个操作正在进行时,又有一个操作试图在其上执行则产生此错误。
如:
在一个正在进行连接的非阻塞套接字上第二次调用connect()函数;或取消一个已经被取消或已完成的异步请求(WSAAsyncGetXbyY())。
WSAECONNABORTED (10053) Softwarecausedconnectionabort.
一个已建立的连接被你的主机上的软件终止,可能是因为一次数据传输超时或是协议错误。
WSAECONNREFUSED (10061) Connectionrefused.
因为目标主机主动拒绝,连接不能建立。
这通常是因为试图连接到一个远程主机上不活动的服务,如没有服务器应用程序处于执行状态。
WSAECONNRESET (10054) Connectionresetbypeer.
存在的连接被远程主机强制关闭。
通常原因为:
远程主机上对等方应用程序突然停止运行,或远程主机重新启动,或远程主机在远程方套接字上使用了“强制”关闭(参见setsockopt(SO_LINGER))。
另外,在一个或多个操作正在进行时,如果连接因“keep-alive”活动检测到一个失败而中断,也可能导致此错误。
此时,正在进行的操作以错误码WSAENETRESET失败返回,后续操作将失败返回错误码WSAECONNRESET。
WSA
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- windowssocket 错误 出错 原因