Windows Sockets错误标识及对应解释

时间:2021-04-12 08:38:21

WSAETIMEDOUT 对应 linux 的 ETIMEDOUT

IdWinsock2.pas 文件中也有说明.

Windows Sockets错误代码

2010-08-03 17:23:29下面以表格的形式列出了WSAGetLastError()函数有可能返回的错误代码和对应的解释。错误代码的数值对于所有的Windows Sockets兼容实现都是一致的。

错误代码 Berkeley对应代码 错误数值 说明
WSAEINTR EINT 10004 函数调用中断。该错误表明由于对WSACancelBlockingCall的调用,造成了一次调用被强行中断。
WSAEBADF EBADF 10009 文件句柄错误。该错误表明提供的文件句柄无效。
WSAEACCES EACCES 10013 权限被拒。尝试进行操作,但被禁止。若试图在sendto或WSASendTo中使用一个广播地址,但是尚未用setsockopt和SO_BROADCAST这两个选项设置广播权限,便会产生这类错误。
WSAEFAULT EFAULT 10014 地址无效。传给Winsock函数的指针地址无效。若指定的缓冲区太小,也会产生这个错误。
WSAEINVAL EINVAL 10022 参数无效。指定了一个无效参数。例如,假如为WSAIoctl调用指定了一个无效控制代码,便会产生这个错误。另外,它也可能表明当前的状态有错,例如在一个目前没有监听的调用accept或WSAAccept。
WSAEMFILE BLOCK EMFILE BLOCK 10024 打开文件过多。提示打开的太多了。通常,Microsoft提供者只受到系统内可用资源数量的限制。
WSAEINPRO EINPRO 10036 资源暂时不可用。对锁定来说,如果请求操作不能立即执行的话,通常会返回这个错误。比如说,在一个暂停调用conn ect,就会返回这个错误。因为连接请求不能立即执行。
GRESS GRESS      操作正在进行中。当前正在执行锁定操作。一般来说不会出现这个错误,除非正在开

发1 6 位Wi n s o c k 应用程序。

WSAEALREADY EALREADY  10037 操作已完成。一般来说,在锁定尝试已处于进程中的操作时,会产生这个错误。比如,在一个已处于连接进程的锁定,再一次调用connect或WSAConnect。另外,服务提供者处于执行回调函数(针对支持回调例程的Winsock函数)的进程中时,也会出现这个错误。
WSAENOTSOCK ENOTSOCK 10038 无效操作。任何一个SOCKET句柄当作参数的Winsock函数都会返回这个错误。它表明提供的字句柄无效。

续表

错误代码 Berkeley对应代码 错误数值 说明
WSAEDESTADDR REQ EDESTADDR REQ 10039 需要目标地址。这个错误表明没有提供具体地址。比方说,假如在调用sendto时,将目标地址设为INADDR_ANY(任意地址),便会返回这个错误。
WSAEMSGSIZE EMSGSIZE 10040 消息过长。这个错误的含义很多。如果在一个数据报发送一条消息,这条消息对内部缓冲区而言太大的话,就会产生这个错误。再比如,由于网络本身的限制,使一条消息过长,也会产生这个错误。最后,如果收到数据报之后,缓冲区太小,不能接收消息时,也会产生这个错误。
WSAEPROTOTYPE EPROTOTYPE 10041 协议类型有误。在socket或WSASocket 调用中指定的协议不支持指定的类型。比如,要求建立SOCK_STREAM类型的一个IP,同时指定协议为IPPROTO_UDP,便会产生这样的错误。
WSAENOPROTO OPT ENOPROTOOPT 10042 协议选项错误。表明在getsockopt或setsockopt 调用中,指定的选项或级别不明、未获支持或者无效。
WSAEPROTONOUPPORT EPROTONO SUPPORT 10043 不支持的协议。系统中没有安装请求的协议或没有相应的实施方案。比如,如果系统中没有安装TCP/IP,而试着建立TCP或UDP时,就会产生这个错误。
WSAESOCKTNO SUPPORT ESOCKTNO SUPPORT 10044 不支持的类型。对指定的地址家族来说,没有相应的具体类型支持。比如,在向一个不支持原始的协议请求建立一个SOCK_RAW类型时,就会产生这个错误。
WSAEOPNOTSUPPORT EOPNOT SUPPORT 10045 不支持的操作。表明针对指定的对象,试图采取的操作未获支持。通常,如果试着在一个不支持调用Winsock函数的调用了Winsock时,就会产生这个错误。
WSAEPFNOSUPPORT EPFNO SUPPORT 10046 不支持的协议家族。请求的协议家族不存在,或系统内尚未安装。多数情况下,这个错误可与WSAEAFNOSUPPORT互换(两者等价);后者出现得更为频繁。
WSAEAFNOSUPPORT EAFNO SUPPORT 10047 地址家族不支持请求的操作。对类型不支持的操作来说,在试着执行它时,就会出现这个错误。比如,在类型为SOCK_STREAM的一个调用sendto或WSASendTo函数时,就会产生这个错误。另外,在调用socket或WSASocket函数的时候,若同时请求了一个无效的地址家族、类型及协议组合,也会产生这个错误。

续表

错误代码 Berkeley对应代码 错误数值 说明
WSAEADDRINUSE EADDRINUSE 10048 地址正在使用。正常情况下,每个只允许使用一个地址这个错误一般和bind、connect和WSAConnect这三个函数有关。可在setsockopt函数中设置选项SO_REUSEA D D R ,允许多个访问同一个本地I P 地址及端口号
WSAEADDRNOT AVAIL EADDRNOT AVAIL 10049 不能分配请求的地址。API调用中指定的地址对那个函数来说无效时,就会产生这样的错误。例如,若在bind调用中指定一个IP地址,但却没有对应的本地IP接口,便会产生这样的错误。另外,通过connect、WSAConnect、sendto、WSASendTo和WSAJoinLeaf这四个函数为准备连接的远程计算机指定端口0时,也会产生这样的错误。
WSAENETDOWN ENETDOWN 10050 网络断开。试图采取一项操作时,却发现网络连接中断。这可能是由于网络堆栈的错误,网络接口的故障,或者本地网络的问题造成的。
WSAENETUNREACH ENETUNREAC H 10051 网络不可抵达。试图采取一项操作时,却发现目标网络不可抵达(不可访问)。这意味着本地主机不知道如何抵达一个远程主机。换言之,目前没有已知的路由可抵达那个目标主机。
WSAENETRESET ENETRESET 10052 网络重设时断开了连接。由于“保持活动”操作检测到一个错误,造成网络连接的中断。若在一个已经无效的连接之,通过setsockopt函数设置SO_KEEPALIVE选项,也会出现这样的错误。
WSAECONNABORT ED ECONNABORTED 10053 软件造成连接取消。由于软件错误,造成一个已经建立的连接被取消。典型情况下,这意味着连接是由于协议或超时错误而被取消的。
WSAECONNRESET ECONNRESET   10054 连接被对方重设。一个已经建立的连接被远程主机强行关闭。若远程主机的进程异常中止运行(由于内存冲突或硬件故障),或者针对执行了一次强行关闭,便会产生这样的错误。针对强行关闭的情况,可用SO_LINGER选项和setsockopt来配置一个
WSAENOBUFS ENOBUFS 10055 没有缓冲区空间。由于系统缺少足够的缓冲区空间,请求的操作不能执行。
WSAEISCONN EISCONN 10056 已经连接。表明在一个已建立连接的,试图再建立一个连接。要注意的是,数据报和数据流均有可能出现这样的错误。使用数据报时,假如事先已通过connect或WSAConnect调用,为数据报通信关联了一个端点的地址,那么以后试图再次调用sendto或WSASendTo,便会产生这样的错误。
WSAENOTCONN ENOTCONN 10057 尚未连接。若在一个尚未建立连接的“面向连接”发出数据收发请求,便会产生这样的错误。

续表

错误代码 Berkeley对应代码 错误数值 说明
WSAESHUTDOWN ESHUTDOWN 10058 关闭后不能发送。表明已通过对shutdown的一次调用,部分关闭了,但后又请求进行数据的收发操作。要注意的是,这种错误只会在已经关闭的那个数据流动方向才会发生。举个例子来说,完成数据发送后,若调用shutdown,那么以后任何数据发送调用都会产生这样的错误。
WSAETIMEDOUT ETIMEDOUT 10060 连接超时。若发出了一个连接请求,但经过规定的时间,远程计算机仍未作出正确的响应(或根本没有任何响应),便会发生这样的错误。要想收到这样的错误,通常需要先在设置好SO_SNDTIMEO和SO_RCVTIMEO选项,然后调用connect及WSAConnect函数。
WSAECONNREFUS ED ECONNREFUSED 10061 连接被拒。由于被目标机器拒绝,连接无法建立。这通常是由于在远程机器,没有任何应用程序可在那个地址之,为连接提供服务。
WSAEHOSTDOWN EHOSTDOWN 10064 主机关闭。这个错误指出由于目标主机关闭,造成操作失败。然而,应用程序此时更有可能收到的是一条WSAETIMEDOUT(连接超时)错误,因为对方关机的情况通常是在试图建立一个连接的时候发生的。
WSAEHOSTUNREA CH EHOSTUNREACH 10065 没有到主机的路由。应用程序试图访问一个不可抵达的主机。该错误类似于WSAENETUNREACH。
WSASYSNOTREA Y   10091 网络子系统不可用。调用WSAStartup时,若提供者不能正常工作(由于提供服务的基层系统不可用),便会返回这种错误。
WSAVERNOTSUPP ORTED   10092 Winsock. dll版本有误。表明不支持请求的Winsock提供者版本。
WSANOTINITIAL ISED   10093 Winsock尚未初始化。尚未成功完成对WSAStartup的一次调用。
 
 
 值对于所有的Windows Sockets兼容实现都是一致的。

Windows Sockets

代码

 Berkele

y对应代码

 错误数值  解释
 WSAEINTR  EINTR  10004  与标准C一致
 WSAEBADF  EBADF  10009  与标准C一致
 WSAEACCES  EACCES  10013  与标准C一致
 WSAEFAULT  EFAULT  10014  与标准C一致
 WSAEINVAL  EINVAL  10022  与标准C一致
 WSAEMFILE  EMFILE  10024  与标准C一致
 WSAEWOULD BLOCK  EWOULD BLOCK  10035  与BSD一致
 WSAEINPRO GRESS  EINPRO GRESS  10036  当应用程序调用Windows Sockets API函数时,如果一个阻塞函数正在运行,将返回该错误。
 WSAEALREADY  EALREADY  10037  与BSD一致
 WSAENOTSOCK  ENOTSOCK  10038  与BSD一致
 WSAEDESTADDR REQ  EDESTADDR REQ  10039  与BSD一致
 WSAEMSGSIZE  EMSGSIZE  10040  与BSD一致
 WSAEPROTOTYPE  EPROTOTYPE  10041  与BSD一致
 WSAENOPROTO OPT  ENOPROTOOPT  10042  与BSD一致
 WSAEPROTONO SUPPORT  EPROTONO SUPPORT  10043  与BSD一致
 WSAESOCKTNO SUPPORT  ESOCKTNO SUPPORT  10044  与BSD一致
 WSAEOPNOT SUPPORT  EOPNOT SUPPORT  10045  与BSD一致
 WSAEPFNO SUPPORT  EPFNO SUPPORT  10046  与BSD一致
 WSAEAFNO SUPPORT  EAFNO SUPPORT  10047  与BSD一致
 WSAEADDRINUSE  EADDRINUSE  10048  与BSD一致
 WSAEADDRNOT AVAIL  EADDRNOT AVAIL  10049  与BSD一致
 WSAENETDOWN  ENETDOWN  10050  与BSD一致, 在Windows Sockets检测到任何底层的失败时,都有可能返回该错误。
 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一致
 WSASYSNOTREAD    10091  由WSAStartup()函数返回,表明底层的网络子系统无法使用。
 WSAVERNOTSUPPORTED    10092  由WSAStartup()函数返回,表明Windows Sockets DLL不支持这一应用。
 WSANOTINITIALISED    10093  由除了WSAStartup()的其他函数返回,表明没有对WSAStartup()函数的成功调用。
 WSAHOST_NOT_FOUND  HOST_NOT_FOUND  11001  与BSD一致
 WSATRY_AGAIN  TRY_AGAIN  11001  与BSD一致
 WSANO_RECOVERY  NO_RECOVERY  11003  与BSD一致
 WSANO_DATA  NO_DATA  11004  与BSD一致
 
 
本文参考来源:

1,http://blog.163.com/aragorn_1024/blog/static/12606592720107352329908/

2,http://www.cnblogs.com/-clq/archive/2012/06/14/2549195.html