Windows Socket套接字(四)-Windows套接字错误代码

WSAGetLastError函数

int WSAGetLastError(void);


返回值表示该线程的最后一个Windows Sockets操作失败的错误代码。

在Winsock应用程序中,使用WSAGetLastError函数检索错误代码 ,Windows Sockets替代WindowsGetLastError函数

这些错误代码和与错误代码相关联的短文本描述在Winerror.h头文件中定义。FormatMessage函数可以用来获得用于返回的错误消息字符串。

以下列表描述了WSAGetLastError函数返回的可能的错误代码 。以错误宏名称的数字顺序列出错误。Winsock2.h头文件中定义的某些错误代码不会从任何函数返回。

返回代码/值 描述
WSA_INVALID_HANDLE 6

指定的事件对象句柄无效。

应用程序尝试使用事件对象,但指定的句柄无效。请注意,此错误由操作系统返回,因此Windows的将来版本中的错误号可能会更改。

WSA_NOT_ENOUGH_MEMORY 8

内存不足。

应用程序使用直接映射到Windows功能的Windows Sockets功能。Windows功能表明缺少所需的内存资源。请注意,此错误由操作系统返回,因此Windows的将来版本中的错误号可能会更改。

WSA_INVALID_PARAMETER 87

一个或多个参数无效。

应用程序使用直接映射到Windows功能的Windows Sockets功能。Windows功能指示一个或多个参数有问题。请注意,此错误由操作系统返回,因此Windows的将来版本中的错误号可能会更改。

WSA_OPERATION_ABORTED 995

重叠操作中止。

重叠操作是由于插座的关闭,或在SIO_FLUSH命令的执行取消 的WSAIoctl。请注意,此错误由操作系统返回,因此Windows的将来版本中的错误号可能会更改。

WSA_IO_INCOMPLETE 996

重叠的I / O事件对象未处于信号状态。

应用程序已尝试确定尚未完成的重叠操作的状态。在轮询模式下使用WSAGetOverlappedResultfWait标志设置为FALSE)的应用程序,以确定重叠操作何时完成,获取此错误代码,直到操作完成。请注意,此错误由操作系统返回,因此Windows的将来版本中的错误号可能会更改。

WSA_IO_PENDING 997

重叠操作将在以后完成。

应用程序已启动无法立即完成的重叠操作。操作完成后,将提供完成指示。请注意,此错误由操作系统返回,因此Windows的将来版本中的错误号可能会更改。

WSAEINTR 10004

中断功能调用

阻塞操作被调用 WSACancelBlockingCall中断

WSAEBADF 10009

文件句柄无效。

提供的文件句柄无效。

WSAEACCES 10013

没有权限。

尝试以其访问权限禁止的方式访问套接字。一个例子是使用sendto的广播地址, 而不使用setsockopt(SO_BROADCAST)设置广播许可。

WSAEACCES错误的另一个可能原因是当 调用绑定函数(在具有SP4和更高版本的Windows NT 4.0上)时,另一个应用程序,服务或内核模式驱动程序被绑定到具有独占访问权限的同一地址。这种独占访问是具有SP4及更高版本的Windows NT 4.0的新功能,并且通过使用SO_EXCLUSIVEADDRUSE选项来实现。

WSAEFAULT 10014

地址不正确

在尝试使用调用的指针参数时,系统检测到无效的指针地址。如果应用程序传递无效的指针值,或者缓冲区的长度太小,则会发生此错误。例如,如果sockaddr结构的参数的长度小于sizeof(sockaddr)。

WSAEINVAL 10022

无效的论点。

提供了一些无效参数(例如,为setsockopt函数指定一个无效级别 )。在某些情况下,它还引用了套接字的当前状态,例如,在未侦听的套接字上调用 accept

WSAEMFILE 10024

打开文件太多

打开插座太多 每个实现可以具有可用的最大数量的套接字句柄,全局,每个进程或每个线程。

WSAEWOULDBLOCK 10035

资源暂时不可用。

从无法立即完成的非阻塞套接字上的操作返回此错误,例如, 当没有任何数据排队等待从套接字读取时的recv。这是一个非致命错误,操作应该稍后重试。因为在非阻塞SOCK_STREAM套接字上调用connect,所以WSAEWOULDBLOCK 被报告是正常的,因为连接建立需要一段时间。

WSAEINPROGRESS 10036

现在正在进行中。

正在执行阻止操作。Windows套接字只允许一个单独的阻塞操作任务或线程优先,如果进行任何其他函数调用(无论是否引用该任何其他套接字),则该功能将失败,并出现WSAEINPROGRESS错误。

WSAEALREADY 10037

操作已经进行中。

在已经在执行的操作的非阻塞套接字上尝试进行操作,即在已经连接的非阻塞套接字上再次调用 连接,或者取消已经被取消或完成的异步请求(WSAAsyncGetXbyY)。

WSAENOTSOCK 10038

非插槽操作。

尝试对不是套接字的操作进行操作。socket句柄参数没有引用有效的套接字,或者对于 selectfd_set的成员 无效。

WSAEDESTADDRREQ 10039

需要目的地址。

在套接字上的操作中省略了所需的地址。例如,如果使用远程地址ADDR_ANY调用sendto,则返回此错误 。

WSAEMSGSIZE 10040

留言太久

在数据报套接字上发送的消息大于内部消息缓冲区或其他网络限制,或者用于接收数据报的缓冲区小于数据报本身。

WSAEPROTOTYPE 10041

套接字的协议错误类型。

在 socket函数调用中指定了不支持所请求的套接字类型语义的协议。例如,无法使用SOCK_STREAM的套接字​​类型指定ARPA Internet UDP协议。

WSAENOPROTOOPT 10042

错误的协议选项。

getsockopt或 setsockopt调用中指定了未知的,无效的或不受支持的选项或级别。

WSAEPROTONOSUPPORT 10043

协议不支持

所请求的协议尚未配置到系统中,或者没有实现。例如, 套接字调用请求一个SOCK_DGRAM套接字,但指定一个流协议。

WSAESOCKTNOSUPPORT 10044

不支持套接字类型

在该地址族中不存在对指定套接字类型的支持。例如,可以在套接字调用中选择可选类型SOCK_RAW ,实现不支持SOCK_RAW套接字。

WSAEOPNOTSUPP 10045

操作不支持

引用的对象类型不支持尝试的操作。通常这种情况发生在不能支持此操作的套接字描述符尝试接受数据报套接字上的连接时。

WSAEPFNOSUPPORT 10046

不支持协议族

协议族尚未配置到系统中,也没有实现。此消息与WSAEAFNOSUPPORT的含义略有不同。但是,在大多数情况下,它可以互换,并且返回其中一个消息的所有Windows Sockets函数也指定WSAEAFNOSUPPORT。

WSAEAFNOSUPPORT 10047

地址家族不支持协议族。

使用与请求的协议不兼容的地址。所有套接字都使用关联的地址系列(即Internet协议的AF_INET)和通用协议类型(即SOCK_STREAM)创建。如果在套接字调用中明确请求了不正确的协议,或者如果将一个错误的系列地址用于套接字,例如在sendto中, 则会返回此错误 。

WSAEADDRINUSE 10048

地址已经在使用。

通常,每个套接字地址(协议/ IP地址/端口)只允许使用一个。如果应用程序尝试套接字绑定到已经用于现有套接字的IP地址/端口,或未正确关闭的套接字或尚未关闭的套接字,则会发生此错误 。对于需要多个套接字绑定到相同端口号的服务器应用程序 ,请考虑使用 setsockopt(SO_REUSEADDR)。客户端应用程序通常不需要调用 绑定在清一色连接会自动选择一个未使用的端口。当 使用通配符地址(涉及到ADDR_ANY)调用绑定时,可能会延迟WSAEADDRINUSE错误,直到提交特定地址。

WSAEADDRNOTAVAIL 10049

无法分配请求的地址。

请求的地址在其上下文中无效。这通常是由于尝试 绑定到对本地计算机无效的地址。当远程地址或端口对远程计算机无效(例如,地址或端口0)时,这也可能来自connect, sendto, WSAConnect, WSAJoinLeaf或 WSASendTo

WSAENETDOWN 10050

网络关闭

套接字操作遇到死网络。这可能表示网络系统(即Windows Sockets DLL运行的协议栈),网络接口或本地网络本身的严重故障。

WSAENETUNREACH 10051

网络不可达。

尝试对无法访问的网络进行套接字操作。这通常意味着本地软件不知道到达远程主机的路由。

WSAENETRESET 10052

网络在重置时丢弃连接。

由于保持活动检测到操作失败,连接已被破坏。如果尝试在已经失败的连接上设置SO_KEEPALIVE,它也可以由setsockopt返回 。

WSAECONNABORTED 10053

软件导致连接中止。

主机中的软件中断了一个已建立的连接,可能是由于数据传输超时或协议错误。

WSAECONNRESET 10054

连接由对等体重置。

现有连接被远程主机强行关闭。如果远程主机上的对等应用程序突然停止,则主机将重新启动,主机或远程网络接口被禁用,或者远程主机使用硬关闭(通常参见setsockopt以了解远程主机上SO_LINGER选项的更多信息)插座)。如果在一个或多个操作进行过程中由于保持活动检测到故障而导致连接中断,则也可能会导致此错误。正在进行的操作与WSAENETRESET失败。随后的操作失败,WSAECONNRESET。

WSAENOBUFS 10055

没有可用的缓冲区。

由于系统缺少足够的缓冲区空间或队列已满,因此无法执行套接字上的操作。

WSAEISCONN 10056

套接字已经连接。

已连接的套接字上发出连接请求。如果在连接的SOCK_DGRAM套接字上调用sendto,则某些实现也会返回此错误 (对于SOCK_STREAM套接字,忽略sendto中的to参数 ),尽管其他实现将此视为合法事件。

WSAENOTCONN 10057

插座没有连接。

不允许发送或接收数据的请求,因为套接字未连接,并且(当使用sendto在数据报套接字上 发送时)没有提供地址。任何其他类型的操作也可能返回此错误 - 例如,如果连接已重置, setsockopt将设置SO_KEEPALIVE

WSAESHUTDOWN 10058

套接字关闭后无法发送。

发送或接收数据的请求是不允许的,因为套接字已经在先前关闭呼叫的方向上已被关闭 。通过调用关机,请求 部分关闭套接字,这是一个发送或接收信号,或两者都已中止的信号。

WSAETOOMANYREFS 10059

引用太多

对一些内核对象的引用太多了。

WSAETIMEDOUT 10060

连接超时。

连接尝试失败,因为连接方在一段时间后没有正确响应,或连接的主机无法响应,建立的连接失败。

WSAECONNREFUSED 10061

拒绝连接。

不能连接,因为目标计算机主动拒绝它。这通常是由于尝试连接到外部主机上处于非活动状态的服务,即没有运行服务器应用程序的服务。

WSAELOOP 10062

无法翻译名称。

无法翻译名称。

WSAENAMETOOLONG 10063

名字太长

名称组件或名称太长。

WSAEHOSTDOWN 10064

主机已关闭

由于目标主机关闭,套接字操作失败。套接字操作遇到死主机。本地主机上的网络活动尚未启动。这些条件更有可能由错误WSAETIMEDOUT表示。

WSAEHOSTUNREACH 10065

没有到主机的路由。

尝试对无法访问的主机进行套接字操作。见WSAENETUNREACH。

WSAENOTEMPTY 10066

目录不为空。

无法删除不为空的目录。

WSAEPROCLIM 10067

过程过多

Windows套接字实现可能对可以同时使用的应用程序数量有限制。 如果达到限制,WSAStartup可能会失败,并显示此错误。

WSAEUSERS 10068

超过用户配额。

超出用户配额。

WSAEDQUOT 10069

超过了磁盘配额。

脱离磁盘配额。

WSAESTALE 10070

陈旧的文件句柄引用。

文件句柄引用不再可用。

WSAEREMOTE 10071

物品遥远

该项目在本地不可用。

WSASYSNOTREADY 10091

网络子系统不可用。

由返回此错误 调用WSAStartup如果Windows Sockets实现不能在这个时候发挥作用,因为它使用提供网络服务的基础系统当前不可用。用户应检查:

  • 相应的Windows Sockets DLL文件在当前路径中。
  • 他们并不试图同时使用多个Windows Sockets实现。如果系统上有多个Winsock DLL,请确保路径中的第一个适用于当前加载的网络子系统。
  • Windows Sockets实施文档,以确保所有必需的组件当前已正确安装和配置。
WSAVERNOTSUPPORTED 10092

Winsock.dll版本超出范围。

当前的Windows Sockets实现不支持应用程序请求的Windows套接字规范版本。检查是否没有旧的Windows Sockets DLL文件被访问。

WSANOTINITIALISED 10093

成功的WSAStartup尚未执行。

应用程序尚未调用 WSAStartup或 WSAStartup失败。应用程序可能正在访问当前活动任务不拥有的套接字(即,尝试在任务之间共享套接字),或者 已经调用了WSACleanup太多次。

WSAEDISCON 10101

正常关机正在进行中。

WSARecv和 WSARecvFrom返回 ,表示远程方已启动了正常的关机顺序。

WSAENOMORE 10102

没有更多的结果。

WSALookupServiceNext函数不能返回更多结果。

WSAECANCELLED 10103

通话已被取消。

在此调用仍在处理时,调用了WSALookupServiceEnd函数。通话已取消。

WSAEINVALIDPROCTABLE 10104

过程调用表无效。

服务提供者过程调用表无效。服务提供商将一个虚假的过程表返回给Ws2_32.dll。这通常是由一个或多个函数指针为NULL引起的。

WSAEINVALIDPROVIDER 10105

服务提供商无效

请求的服务提供商无效。如果无法找到指定的协议条目,WSCGetProviderInfoWSCGetProviderInfo32函数将返回此错误。如果服务提供商返回了2.0以外的版本号,也会返回此错误。

WSAEPROVIDERFAILEDINIT 10106

服务提供商无法初始化。

请求的服务提供程序无法加载或初始化。如果服务提供商的DLL无法加载(LoadLibrary失败)或提供程序的 WSPStartupNSPStartup函数失败,则返回此错误。

WSASYSCALLFAILURE 10107

系统调用失败。

永远不会失败的系统调用失败。这是一个通用的错误代码,在各种条件下返回。

当不应该失败的系统调用失败时返回。例如,如果对WaitForMultipleEvents的调用失败或其中一个注册表函数尝试操纵协议/命名空间目录失败。

当提供者不返回SUCCESS并且不提供扩展错误代码时返回。可以指示服务提供商实现错误。

WSASERVICE_NOT_FOUND 10108

无法提供服务。

没有这样的服务是已知的。在指定的名称空间中找不到该服务。

WSATYPE_NOT_FOUND 10109

找不到类类型。

没有找到指定的类。

WSA_E_NO_MORE 10110

没有更多的结果。

WSALookupServiceNext函数不能返回更多结果。

WSA_E_CANCELLED 10111

通话被取消。

在此调用仍在处理时,调用了WSALookupServiceEnd函数。通话已取消。

WSAEREFUSED 10112

数据库查询被拒绝。

数据库查询失败,因为它被积极拒绝。

WSAHOST_NOT_FOUND 11001

主机未找到。

没有这样的主机是已知的。该名称不是正式的主机名或别名,或者在正被查询的数据库中找不到。也可能会为协议和服务查询返回此错误,并且意味着在相关数据库中找不到指定的名称。

WSATRY_AGAIN 11002

未找到非授权主机。

这通常是主机名解析过程中的临时错误,意味着本地服务器没有收到权威服务器的响应。稍后的一段时间的重试可能会成功。

WSANO_RECOVERY 11003

这是一个不可恢复的错误。

这表示在数据库查找期间发生某种不可恢复的错误。这可能是因为无法找到数据库文件(例如,BSD兼容的HOSTS,SERVICES或PROTOCOLS文件),或者服务器返回严重错误的DNS请求。

WSANO_DATA 11004

有效名称,无请求类型的数据记录。

请求的名称有效,并在数据库中找到,但没有正确的关联数据被解析。通常的示例是使用DNS(域名服务器)的主机名到地址转换尝试(使用 gethostbynameWSAAsyncGetHostByName)。返回一条MX记录,但没有A记录 - 表示主机本身存在,但不能直接访问。

WSA_QOS_RECEIVERS 11005

QoS接收器。

至少有一个QoS保留已经到达。

WSA_QOS_SENDERS 11006

QoS发送者。

至少有一个QoS发送路径到达。

WSA_QOS_NO_SENDERS 11007

没有QoS发件人

没有QoS发件人。

WSA_QOS_NO_RECEIVERS 11008

QoS无接收器

没有QoS接收器。

WSA_QOS_REQUEST_CONFIRMED 11009

QoS请求已确认。

QoS保留请求已被确认。

WSA_QOS_ADMISSION_FAILURE 11010

QoS准入错误。

由于缺少资源而发生QoS错误。

WSA_QOS_POLICY_FAILURE 11011

QoS策略失败。

QoS请求被拒绝,因为策略系统无法在现有策略中分配请求的资源。

WSA_QOS_BAD_STYLE 11012

QoS不好的风格。

遇到未知或冲突的QoS风格。

WSA_QOS_BAD_OBJECT 11013

QoS不好的对象。

一般来说,filterspec或提供程序特定缓冲区的某些部分遇到问题。

WSA_QOS_TRAFFIC_CTRL_ERROR 11014

QoS流量控制错误。

基础流量控制(TC)API作为通用QoS请求的错误被TC API转换为本地执行。这可能是由于内存不足错误或内部QoS提供程序错误。

WSA_QOS_GENERIC_ERROR 11015

QoS通用错误。

一般的QoS错误。

WSA_QOS_ESERVICETYPE 11016

QoS服务类型错误。

在QoS流规程中发现无效或无法识别的服务类型。

WSA_QOS_EFLOWSPEC 11017

QoS流量错误。

QOS结构中发现一个无效或不一致的flowspec。

WSA_QOS_EPROVSPECBUF 11018

无效的QoS提供程序缓冲区。

无效的QoS提供者特定的缓冲区。

WSA_QOS_EFILTERSTYLE 11019

QoS过滤器样式无效。

使用无效的QoS过滤器样式。

WSA_QOS_EFILTERTYPE 11020

QoS过滤器类型无效。

使用无效的QoS过滤器类型。

WSA_QOS_EFILTERCOUNT 11021

QoS过滤器计数不正确

在FLOWDESCRIPTOR中指定了错误的QoS FILTERSPEC数。

WSA_QOS_EOBJLENGTH 11022

QoS对象长度无效。

具有无效ObjectLength字段的对象在QoS提供者特定的缓冲区中被指定。

WSA_QOS_EFLOWCOUNT 11023

错误的QoS流量计数。

在QoS结构中指定了不正确的流描述符数量。

WSA_QOS_EUNKOWNPSOBJ 11024

无法识别的QoS对象。

在QoS提供商特定的缓冲区中发现一个无法识别的对象。

WSA_QOS_EPOLICYOBJ 11025

无效的QoS策略对象。

在QoS提供商特定缓冲区中找到无效的策略对象。

WSA_QOS_EFLOWDESC 11026

无效的QoS流描述符。

在流描述符列表中找到了无效的QoS流描述符。

WSA_QOS_EPSFLOWSPEC 11027

QoS提供者特定流规范无效。

在QoS提供者特定的缓冲区中发现一个无效或不一致的流规。

WSA_QOS_EPSFILTERSPEC 11028

无效的QoS提供商特定的过滤器规范。

在QoS提供商特定缓冲区中发现无效FILTERSPEC。

WSA_QOS_ESDMODEOBJ 11029

QoS形状丢弃模式对象无效。

在QoS提供者特定缓冲区中发现无效的形状丢弃模式对象。

WSA_QOS_ESHAPERATEOBJ 11030

无效的QoS整形率对象。

在QoS提供者特定的缓冲区中找到了一个无效的整形速率对象。

WSA_QOS_RESERVED_PETYPE 11031

保留策略QoS元素类型。

在QoS提供商特定缓冲区中发现了保留的策略元素。

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值