【转】Windows Sockets错误代码Linux对照表

原文地址:

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


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

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

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

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

 

   续表

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

 

   续表

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

 

   续表

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值