Windows 套接字错误代码 (Winsock2.h)

Windows 套接字错误代码 (Winsock2.h)

Windows套接字错误代码

项目

09/22/2022

大多数Windows Sockets 2 函数在函数返回时不会返回错误的特定原因。 有关详细信息,请参阅 “处理 Winsock 错误 ”主题。

WSAGetLastError 函数返回调用线程发生的最后一个错误。 当特定Windows Sockets 函数指示发生了错误时,应立即调用此函数以检索失败函数调用的扩展错误代码。 这些错误代码和与错误代码关联的简短文本说明在 Winerror.h 头文件中定义。 FormatMessage 函数可用于获取返回错误的消息字符串。

有关如何在将套接字应用程序移植到 Winsock 时处理错误代码的信息,请参阅 错误代码 – errno、h_errno 和 WSAGetLastError。

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

返回代码/值说明WSA_INVALID_HANDLE6指定的事件对象句柄无效。 应用程序尝试使用事件对象,但指定的句柄无效。WSA_NOT_ENOUGH_MEMORY8内存不足。 应用程序使用直接映射到Windows函数的 Windows Sockets 函数。 Windows函数指示缺少所需的内存资源。WSA_INVALID_PARAMETER87一个或多个参数无效。 应用程序使用直接映射到Windows函数的 Windows Sockets 函数。 Windows函数指示一个或多个参数存在问题。WSA_OPERATION_ABORTED995已中止的重叠操作。 由于套接字关闭或 WSAIoctl 中SIO_FLUSH命令的执行,取消了重叠的操作。WSA_IO_INCOMPLETE996不处于信号状态的重叠 I/O 事件对象。 应用程序已尝试确定尚未完成的重叠操作的状态。 在轮询模式下将 WSAGetOverlappedResult (与 fWait 标志设置为 FALSE) 的应用程序,以确定重叠操作何时完成,直到操作完成为止,获取此错误代码。WSA_IO_PENDING997重叠的操作稍后将完成。 应用程序已启动一个无法立即完成的重叠操作。 操作完成后,稍后会给出完成指示。WSAEINTR10004中断的函数调用。 对 WSACancelBlockingCall 的调用中断了阻塞操作。WSAEBADF10009文件句柄无效。 提供的文件句柄无效。 WSAEACCES10013权限被拒绝。 尝试以禁止其访问权限的方式访问套接字。 例如,使用 setockopt (SO_BROADCAST) 在未设置广播权限的情况下使用 sendto 的广播地址。 WSAEACCES 错误的另一个可能原因是,使用 SP4 和) 更高版本的 SP4 在 Windows NT 4.0 上调用绑定函数 (时,另一个应用程序、服务或内核模式驱动程序将绑定到具有独占访问权限的同一地址。 此类独占访问是 sp4 及更高版本Windows NT 4.0 的新功能,通过使用 SO_EXCLUSIVEADDRUSE 选项实现。WSAEFAULT10014地址错误。 系统在尝试使用调用的指针参数时检测到无效的指针地址。 如果应用程序传递无效的指针值,或者缓冲区长度过小,则会发生此错误。 例如,如果参数的长度(即 sockaddr 结构)小于 (sockaddr) 的大小。WSAEINVAL10022参数无效。 例如, (提供了一些无效参数,用于指定 setsockopt 函数) 的无效级别。 在某些情况下,它还引用套接字的当前状态,例如,在未侦听的套接字上调用 accept 。WSAEMFILE10024打开的文件太多。 打开的套接字过多。 每个实现的最大可用套接字句柄数(全局、每个进程或每个线程)。WSAEWOULDBLOCK10035资源暂时不可用。 此错误是从无法立即完成的非阻止套接字上的操作返回的,例如,当没有将数据排队从套接字读取时 , 将返回此错误。 这是一个非致命错误,稍后应重试该操作。 WSAEWOULDBLOCK 通常是由于调用非阻止SOCK_STREAM套接字上的 连接 而报告的,因为必须经过一段时间才能建立连接。WSAEINPROGRESS10036操作正在进行中。 阻止操作当前正在执行。 Windows套接字仅允许单个阻塞操作(每个任务或线程)未完成,如果发出任何其他函数调用, (是否引用该函数或其他任何套接字,) 函数失败并出现 WSAEINPROGRESS 错误。WSAEALREADY10037操作正在进行中。 在正在进行的操作的非阻止套接字上尝试了一个操作,即在已连接的非阻止套接字上调用第二次 连接 ,或者取消已取消已取消或已完成的 WSAAsyncGetXbyY) 异步 (请求。WSAENOTSOCK10038非ocket 上的套接字操作。 尝试对不是套接字的内容执行操作。 套接字句柄参数未引用有效的套接字,或者对于 select, fd_set 的成员无效。WSAEDESTADDRREQ10039所需的目标地址。 套接字上的操作中省略了所需的地址。 例如,如果使用远程地址ADDR_ANY调用 sendto ,则返回此错误。WSAEMSGSIZE10040消息太长。 在数据报套接字上发送的消息大于内部消息缓冲区或其他一些网络限制,或者用于接收数据报的缓冲区小于数据报本身。WSAEPROTOTYPE10041套接字的协议错误类型。 套接字 函数调用 中指定了一个协议,该协议不支持所请求的套接字类型的语义。 例如,不能使用套接字类型SOCK_STREAM指定 ARPA Internet UDP 协议。WSAENOPROTOOPT10042协议选项不正确。 在 getsockopt 或 setsockopt 调用中指定了未知、无效或不受支持的选项或级别。WSAEPROTONOSUPPORT10043不支持协议。 请求的协议尚未配置到系统中,或不存在任何实现。 例如, 套接字 调用请求SOCK_DGRAM套接字,但指定流协议。WSAESOCKTNOSUPPORT10044不支持套接字类型。 在此地址族中不存在对指定的套接字类型的支持。 例如,可选类型SOCK_RAW可能在 套接字 调用中选择,并且实现根本不支持SOCK_RAW套接字。WSAEOPNOTSUPP10045不支持操作。 引用的对象类型不支持尝试的操作。 通常,当套接字描述符到不支持此操作的套接字时,通常会尝试接受数据报套接字上的连接。WSAEPFNOSUPPORT10046不支持协议系列。 协议系列尚未配置到系统中,或者不存在任何实现。 此消息的含义与 WSAEAFNOSUPPORT 略有不同。 但是,在大多数情况下可互换,返回其中一条消息的所有Windows套接字函数也指定 WSAEAFNOSUPPORT。WSAEAFNOSUPPORT10047协议系列不支持地址系列。 使用了与请求的协议不兼容的地址。 所有套接字都是使用关联的地址系列 (创建的,即 Internet 协议) AF_INET,以及一种泛型协议类型 (,即SOCK_STREAM) 。 如果在 套接字 调用中显式请求了错误的协议,或者错误系列地址用于套接字(例如 ,在 sendto 中)时,将返回此错误。WSAEADDRINUSE10048已使用的地址。 通常,只允许使用每个套接字地址 (协议/IP 地址/端口) 。 如果应用程序尝试将套接字 绑定到 已用于现有套接字的 IP 地址/端口,或者未正确关闭的套接字,或者仍在关闭过程中的套接字,则会发生此错误。 对于需要将多个套接字 绑定到 同一端口号的服务器应用程序,请考虑使用 setsockopt (SO_REUSEADDR) 。 客户端应用程序通常根本不需要调用 绑定 – 连接 会自动选择未使用的端口。 使用涉及ADDR_ANY) 的通配符地址 (调用 绑定 时,可能会延迟 WSAEADDRINUSE 错误,直到提交特定地址。 稍后可能会调用另一个函数,包括 连接、 侦听、 WSAConnect 或 WSAJoinLeaf。WSAEADDRNOTAVAIL10049无法分配请求的地址。 请求的地址在其上下文中无效。 这通常会导致尝试 绑定到 对本地计算机无效的地址。 如果远程地址或端口对远程计算机无效(例如地址或端口 0 () )无效,则这也可能导致 连接、 sendto、 WSAConnect、 WSAJoinLeaf 或 WSASendTo 。WSAENETDOWN10050网络已关闭。 套接字操作遇到了一个已死的网络。 这可能表明网络系统(也就时说,Windows Sockets DLL 的协议堆栈溢出)、网络接口或局域网本身出现严重故障。WSAENETUNREACH10051网络无法访问。 已尝试对无法访问的网络执行套接字操作。 这通常意味着本地软件不知道要访问远程主机的路由。WSAENETRESET10052重置时网络断开的连接。 由于在操作正在进行时检测到故障,连接已中断。 如果尝试在已失败的连接上设置SO_KEEPALIVE,则 setockopt 也可以返回它。WSAECONNABORTED10053软件导致连接中止。 由于数据传输超时或协议错误,主机计算机中的软件中止了建立的连接。WSAECONNRESET10054按对等方重置连接。 远程主机强行关闭现有连接。 这通常会导致远程主机上的对等应用程序突然停止、主机重新启动、主机或远程网络接口被禁用,或者远程主机使用硬关闭 (查看 setsockopt ,详细了解远程套接字上的SO_LINGER选项) 。 如果连接因活动保持活动检测到故障而中断,同时一个或多个操作正在进行中,也可能导致此错误。 正在进行的操作失败,WSAENETRESET。 后续操作失败,WSAECONNRESET。WSAENOBUFS10055没有可用的缓冲区空间。 由于系统没有足够的缓冲区空间或队列已满,因此无法对套接字执行操作。WSAEISCONN10056套接字已连接。 在已连接的套接字上发出了连接请求。 如果对连接SOCK_DGRAM套接字 (调用 sendto 来SOCK_STREAM套接字,某些实现也会返回此错误,) 忽略 sendto 中的 to 参数,尽管其他实现将此视为合法事件。WSAENOTCONN10057套接字未连接。 不允许发送或接收数据的请求,因为套接字未连接,并且使用 sendto 在数据报套接字上发送时 () 未提供地址。 任何其他类型的操作也可能返回此错误,例如,如果连接已重置, 则 setsockopt 设置 SO_KEEPALIVE 。WSAESHUTDOWN10058套接字关闭后无法发送。 不允许发送或接收数据的请求,因为该套接字已在上一次 关闭 调用中关闭该方向。 通过调用 关闭 ,请求关闭部分关闭套接字,这是发送或接收的信号,或者两者都已停止。WSAETOOMANYREFS10059引用过多。 对某些内核对象的引用过多。WSAETIMEDOUT10060连接超时。 连接尝试失败,因为连接方在一段时间后未正确响应,或已建立的连接失败,因为连接的主机未能响应。WSAECONNREFUSED10061连接被拒绝。 无法建立连接,因为目标计算机主动拒绝连接。 这通常会导致尝试连接到在外部主机上处于非活动状态的服务,即没有运行服务器应用程序的服务。WSAELOOP10062无法转换名称。 无法转换名称。WSAENAMETOOLONG10063名称太长。 名称组件或名称太长。WSAEHOSTDOWN10064主机已关闭。 由于目标主机关闭,套接字操作失败。 套接字操作遇到死主机。 尚未启动本地主机上的网络活动。 这些条件更有可能由错误 WSAETIMEDOUT 指示。WSAEHOSTUNREACH10065没有要托管的路由。 套接字操作尝试访问无法访问的主机。 请参阅 WSAENETUNREACH。WSAENOTEMPTY10066目录不为空。 无法删除不为空的目录。WSAEPROCLIM10067进程过多。 Windows套接字实现可能会对可以同时使用它的应用程序数有限制。 如果达到限制,WSAStartup 可能会失败,并出现此错误。WSAEUSERS10068超出用户配额。 用户配额不足。 WSAEDQUOT10069超过磁盘配额。 磁盘配额不足。 WSAESTALE10070过时的文件句柄引用。 文件句柄引用不再可用。 WSAEREMOTE10071项是远程项。 该项在本地不可用。 WSASYSNOTREADY10091网络子系统不可用。 如果Windows套接字实现目前无法正常工作,则 WSAStartup 将返回此错误,因为它用于提供网络服务的基础系统当前不可用。 用户应检查:相应的Windows套接字 DLL 文件位于当前路径中。它们不会同时尝试使用多个Windows套接字实现。 如果系统上有多个 Winsock DLL,请确保路径中的第一个 DLL 适用于当前加载的网络子系统。Windows套接字实现文档,以确保当前正确安装和配置所有必要的组件。WSAVERNOTSUPPORTED10092Winsock.dll版本范围不足。 当前Windows套接字实现不支持应用程序请求的Windows套接字规范版本。 检查没有访问任何旧的 Windows 套接字 DLL 文件。WSANOTINITIALISED10093尚未执行成功的 WSAStartup。 应用程序未调用 WSAStartup 或 WSAStartup 失败。 应用程序可能会访问当前活动任务不拥有 (的套接字,即尝试在任务) 之间共享套接字,或者 已调用 WSACleanup 多次。WSAEDISCON10101正在正常关闭。 由 WSARecv 和 WSARecvFrom 返回,以指示远程方已启动正常关闭序列。WSAENOMORE10102没有更多结果。 WSALookupServiceNext 函数无法返回更多结果。WSAECANCELLED10103已取消呼叫。 调用 WSALookupServiceEnd 函数时仍在处理。 已取消呼叫。WSAEINVALIDPROCTABLE10104过程调用表无效。 服务提供程序过程调用表无效。 服务提供商返回了Ws2_32.dll的虚假过程表。 这通常是由一个或多个函数指针为 NULL 引起的。WSAEINVALIDPROVIDER10105服务提供商无效。 请求的服务提供程序无效。 如果找不到指定的协议条目, WSCGetProviderInfo 和 WSCGetProviderInfo32 函数将返回此错误。 如果服务提供商返回的版本号不是 2.0,也会返回此错误。WSAEPROVIDERFAILEDINIT10106服务提供程序无法初始化。 无法加载或初始化请求的服务提供程序。 如果无法加载服务提供商的 DLL, (LoadLibrary 失败) 或提供程序的 WSPStartup 或 NSPStartup 函数失败,则返回此错误。WSASYSCALLFAILURE10107系统调用失败。 不应失败的系统调用失败。 这是一个通用错误代码,在各种条件下返回。 当从不失败的系统调用失败时返回。 例如,如果对 WaitForMultipleEvents 的 调用失败,或者其中一个注册表函数无法尝试操作协议/命名空间目录。 当提供程序不返回 SUCCESS 且不提供扩展错误代码时返回。 可以指示服务提供商实现错误。WSASERVICE_NOT_FOUND10108找不到服务。 目前尚不清楚此类服务。 无法在指定的名称空间中找到该服务。WSATYPE_NOT_FOUND10109找不到类类型。 未找到指定的类。WSA_E_NO_MORE10110没有更多结果。 WSALookupServiceNext 函数无法返回更多结果。WSA_E_CANCELLED10111已取消呼叫。 调用 WSALookupServiceEnd 函数时仍在处理。 已取消呼叫。WSAEREFUSED10112数据库查询被拒绝。 数据库查询失败,因为它被主动拒绝。WSAHOST_NOT_FOUND11001找不到主机。 无法识别这种主机。 该名称不是官方主机名或别名,或者无法在查询 () 中找到该名称。 对于协议和服务查询,也可能返回此错误,这意味着在相关数据库中找不到指定的名称。WSATRY_AGAIN11002找不到非授权主机。 这通常是主机名解析过程中的临时错误,意味着本地服务器未收到来自权威服务器的响应。 在稍后的某个时间进行的重试可能成功。WSANO_RECOVERY11003这是不可恢复的错误。 这表示在数据库查找过程中发生了某种不可恢复的错误。 这可能是因为找不到与 BSD 兼容的 HOSTS、SERVICES 或 PROTOCOLS 文件) (的数据库文件,或者服务器返回 DNS 请求时出现严重错误。WSANO_DATA11004有效名称,没有请求类型的数据记录。 请求的名称有效,在数据库中找到,但未解析正确的关联数据。 通常的示例是使用 gethostbyname 或 WSAAsyncGetHostByName () 使用 DNS (域名服务器) 的主机名到地址转换尝试。 返回 MX 记录,但没有 A 记录,指示主机本身存在,但不可直接访问。WSA_QOS_RECEIVERS11005QoS 接收器。 至少有一个 QoS 储备已到达。WSA_QOS_SENDERS11006QoS 发送方。 至少有一个 QoS 发送路径已到达。WSA_QOS_NO_SENDERS11007无 QoS 发送方。 没有 QoS 发送方。WSA_QOS_NO_RECEIVERS11008QoS 无接收器。 没有 QoS 接收器。WSA_QOS_REQUEST_CONFIRMED11009已确认 QoS 请求。 已确认 QoS 保留请求。WSA_QOS_ADMISSION_FAILURE11010QoS 允许错误。 由于缺少资源,出现 QoS 错误。WSA_QOS_POLICY_FAILURE11011QoS 策略失败。 QoS 请求被拒绝,因为策略系统无法在现有策略中分配请求的资源。 WSA_QOS_BAD_STYLE11012QoS 错误样式。 遇到未知或冲突的 QoS 样式。WSA_QOS_BAD_OBJECT11013QoS 错误对象。 一般情况下,filterspec 的某些部分或提供程序特定的缓冲区遇到了问题。WSA_QOS_TRAFFIC_CTRL_ERROR11014QoS 流量控制错误。 基础流量控制 (TC) API 错误,因为通用 QoS 请求已转换为 TC API 的本地强制实施。 这可能是由于内存不足错误或内部 QoS 提供程序错误所致。 WSA_QOS_GENERIC_ERROR11015QoS 泛型错误。 常规 QoS 错误。WSA_QOS_ESERVICETYPE11016QoS 服务类型错误。 在 QoS 流spec 中找到无效或无法识别的服务类型。WSA_QOS_EFLOWSPEC11017QoS 流spec 错误。 在 QOS 结构中找到无效或不一致的 flowspec。WSA_QOS_EPROVSPECBUF11018QoS 提供程序缓冲区无效。 特定于 QoS 提供程序的缓冲区无效。WSA_QOS_EFILTERSTYLE11019QoS 筛选器样式无效。 使用了无效的 QoS 筛选器样式。WSA_QOS_EFILTERTYPE11020QoS 筛选器类型无效。 使用了无效的 QoS 筛选器类型。WSA_QOS_EFILTERCOUNT11021QoS 筛选器计数不正确。 FLOWDESCRIPTOR 中指定了不正确的 QoS FILTERSPEC 数。WSA_QOS_EOBJLENGTH11022QoS 对象长度无效。 在 QoS 提供程序特定的缓冲区中指定了具有无效 ObjectLength 字段的对象。WSA_QOS_EFLOWCOUNT11023QoS 流计数不正确。 QoS 结构中指定了错误的流描述符数。WSA_QOS_EUNKOWNPSOBJ11024无法识别的 QoS 对象。 在特定于 QoS 提供程序的缓冲区中找到一个无法识别的对象。WSA_QOS_EPOLICYOBJ11025QoS 策略对象无效。 在特定于 QoS 提供程序的缓冲区中找到无效的策略对象。WSA_QOS_EFLOWDESC11026QoS 流描述符无效。 在流描述符列表中找到了无效的 QoS 流描述符。WSA_QOS_EPSFLOWSPEC11027特定于 QoS 提供程序的流spec 无效。 在特定于 QoS 提供程序的缓冲区中找到无效或不一致的 flowspec。WSA_QOS_EPSFILTERSPEC11028特定于 QoS 提供程序的筛选器spec 无效。 在特定于 QoS 提供程序的缓冲区中找到无效的 FILTERSPEC。WSA_QOS_ESDMODEOBJ11029QoS 形状放弃模式对象无效。 在特定于 QoS 提供程序的缓冲区中找到无效的形状放弃模式对象。WSA_QOS_ESHAPERATEOBJ11030QoS 整形速率对象无效。 在 QoS 提供程序特定的缓冲区中找到无效的整形速率对象。WSA_QOS_RESERVED_PETYPE11031保留策略 QoS 元素类型。 在特定于 QoS 提供程序的缓冲区中找到保留的策略元素。

 

要求要求Value标头 Winsock2.h; Winerror.h 另请参阅

错误代码 – errno、h_errno 和 WSAGetLastError

处理 Winsock 错误

FormatMessage

WSAGetLastError

 

 


比丘资源网 » Windows 套接字错误代码 (Winsock2.h)

发表回复

提供最优质的资源集合

立即查看 了解详情