WSAGetLastError返回的可能错误代码

WSAGetLastError (Wsapiref_2tiq.asp) 函数返回了可能的错误代码。 错误错误宏按字母顺序列出。 不从任何函数返回在 Winsock2.h 中定义一些错误代码。 本文中不包括这些错误代码。

更多信息WSAEINTR (10004) 翻译: 中断函数调用。 说明: A 阻塞操作已被 WSACancelBlockingCall (Wsapiref_704y.a...WSAEINTR (10004)
翻译: 中断函数调用。
说明: A 阻塞操作已被 WSACancelBlockingCall (Wsapiref_704y.asp) 调用中断。

WSAEACCES (10013)
翻译: 权限被拒绝。
说明: 访问被禁止通过其访问权限的方式套接字的尝试。 渚嬪广播的地址用于 sendto 但通过使用 setsockopt(SO_BROADCAST) 未设置广播的权限时,将发生此错误。 WSAEACCES 错误的另一个可能原因是,当绑定 (Wsapiref_6vzm.asp) 函数被调用时 (在 Microsoft Windows NT 4.0 Service Pack 4 [SP4] 或更高版本),另一个程序、 服务,或内核模式驱动程序绑定到相同的地址以独占访问权限。 这样的独占访问权限是一种新的功能的 Windows NT 4.0 SP4 和更高版本中,和实现通过使用 SO_EXCLUSIVEADDRUSE 选项。

WSAEFAULT (10014)
翻译: 错误地址。
说明: 尝试使用指针参数的调用时,系统检测到无效指针地址。 如果某个程序通过无效指针值,或如果缓冲区的长度太小,则会发生此错误。 渚嬪如果小于 sizeof(SOCKADDR) 值的参数是 SOCKADDR 结构的长度,则会出现此问题。

WSAEINVAL (10022)
翻译: 参数无效。
说明: 向 setsockopt (Wsapiref_94aa.asp) 函数提供了无效的参数 (渚嬪指定无效的级别的参数)。 有时,还指套接字的当前状态、 电话渚嬪没有侦听的套接字上接受 (Wsapiref_13aq.asp)。

WSAEMFILE (10024)
翻译: 打开的文件太多。
说明: 有太多打开的套接字。 每个实现可能具有可用的套接字句柄的最大数量。 这些句柄可能可用的全局,每进程,或每个线程。

WSAEWOULDBLOCK (10035)
翻译: 资源暂时不可用。
说明: 此错误从无法立即完成,渚嬪的非阻止套接字上的操作 (Wsapiref_2i9e.asp) 接收时返回无数据排队从套接字读取。 它是一个非严重的错误和操作可以在稍后重试。 WSAEWOULDBLOCK 通常被报告为结果的电话连接 (Wsapiref_8m7m.asp) 非阻止 SOCK_STREAM 套接字上,因为对于建立该连接必须经过一些时间。

WSAEINPROGRESS (10036)
翻译: 现在正在进行的操作。
说明: 当前正在运行的阻止操作。 Windows 套接字只允许一个阻塞操作为每个任务或为每个线程是未完成。 如果任何其他函数调用 (无论它引用的或任何其他套接字),函数失败,WSAEINPROGRESS 错误。

WSAEALREADY (10037)
翻译: 已在进行的操作。
说明: 一个操作,在操作正在进行时尝试对非阻止套接字。 渚嬪电话连接 (Wsapiref_8m7m.asp),在第二次尝试对非阻止套接字已连接的或异步请求 (WSAAsyncGetXbyY),在尝试已经已被取消或完成的。

WSAENOTSOCK (10038)
翻译: 套接字上 nonsocket 的操作。
说明: 上某些内容不是一套接字已尝试的操作。 套接字的句柄参数没有引用一个有效套接字,或者选择 (Wsapiref_1ab6.asp),为一个 fd_set 的成员已无效。

WSAEDESTADDRREQ (10039)
翻译: 所需的目标地址。
说明: 从上一个套接字的操作省略了一个必需的地址。 渚嬪 sendto (Wsapiref_4sqa.asp) 调用使用 ADDR_ANY 的远程地址,则返回此错误。

WSAEMSGSIZE (10040)
翻译: 消息太长。
说明: 数据文报套接字发送的邮件已大于内部消息缓冲区或某些其他网络限制或用于接收数据报的缓冲区比数据报本身小。

WSAEPROTOTYPE (10041)
翻译: 协议套接字的类型错误。
说明: 套接字 (Wsapiref_2qr6.asp) 函数调用中指定的协议不支持请求的套接字类型的语义。 渚嬪 ARPA Internet UDP 协议不能指定与 SOCK_STREAM 的套接字类型。

WSAENOPROTOOPT (10042)
翻译: 错误协议选项。
说明: getsockopt (Wsapiref_8qcy.asp) 调用或 setsockopt (Wsapiref_94aa.asp) 调用中指定了一个未知、 无效,或不受支持的选项或级别。

WSAEPROTONOSUPPORT (10043)
翻译: 不支持的协议。
说明: 请求的协议未要么被配置为在系统中或它的实现不存在。 渚嬪套接字 (Wsapiref_2qr6.asp) 调用请求 SOCK_DGRAM 套接字,但它指定流协议。

WSAESOCKTNOSUPPORT (10044)
翻译: 套接字类型不受支持。
说明: 这个地址家族中不存在指定的套接字类型的支持。 套渚嬪可选类型可能在套接字 (Wsapiref_2qr6.asp) 调用中被选中,但实现不支持 SOCK_RAW SOCK_RAW 接字根本。

WSAEOPNOTSUPP (10045)
翻译: 不支持的操作。
说明: 被引用的对象类型不支持所尝试的操作。 此错误通常在一个套接字描述符到不支持此操作,一套接字试图接受连接数据报套接字上的时发生。

WSAEPFNOSUPPORT (10046)
翻译: 协议家族不受支持。
说明: 尚未在系统中配置的协议族或它的实现不存在。 此邮件有 WSAEAFNOSUPPORT 含义略有不同。 但是,它是经常可互换的。 返回一个这些消息的所有 Windows 套接字函数还都指定 WSAEAFNOSUPPORT。

WSAEAFNOSUPPORT (10047)
翻译: 地址族不支持的协议族。
说明: 使用了地址与请求的协议不兼容。 与一个相关联的地址族 (也就是 AF_INET 的 Internet 协议) 和泛型的协议类型 (SOCK_STREAM) 创建所有的套接字。 如果不正确的协议明确请求的套接字 (Wsapiref_2qr6.asp) 调用中,或不正确的家族的地址用于一个插槽渚嬪 sendto (Wsapiref_4sqa.asp) 中,将返回此错误。

WSAEADDRINUSE (10048)
翻译: 已在使用中的地址。
说明: 通常,允许的每个套接字地址 (协议/IP 地址/端口) 只有一个用法。 如果某个程序试图将绑定 (Wsapiref_6vzm.asp) 为 IP 地址或端口已被使用的一个现有插槽未正确,关闭一个套接字的套接字,会发生此错误,或仍在结束的过程是一套接字。 已将多个套接字绑定到相同的端口号的服务器程序应考虑使用 setsockopt (Wsapiref_94aa.asp)(SO_REUSEADDR)。 客户端程序通常不具有在所有调用绑定、 连接 (Wsapiref_8m7m.asp) 自动选择未使用的端口。 当一个绑定调用使用通配符地址 (涉及 ADDR_ANY) 时,直到特定地址被提交,可能会延迟 WSAEADDRINUSE 错误。 这可能会出现与发生更高版本,包括连接、 侦听、 WSAConnect,或 WSAJoinLeaf 的另一个函数调用。

WSAEADDRNOTAVAIL (10049)
转换: 无法分配请求的地址。
说明: 请求的地址是其上下文中的无效。 此错误通常结果从试图绑定 (Wsapiref_6vzm.asp) 到不在本地计算机的无效的地址。 此错误也可能会导致从连接 (Wsapiref_8m7m.asp) sendto (Wsapiref_4sqa.asp) WSAConnect (Wsapiref_8kc2.asp)、 WSAJoinLeaf (Wsapiref_7dv6.asp) 或 WSASendTo (Wsapiref_752q.asp) 时远程地址或端口是无效的远程计算机 (for example,地址或端口 0)。

WSAENETDOWN (10050)
翻译: 网络已关闭。
说明: 一个套接字操作遇到死网络。 此错误可能表示网络系统 (也就是协议堆栈运行的 Windows 套接字 DLL 的)、 网络接口或本地网络本身的严重故障。

WSAENETUNREACH (10051)
转换: 无法访问网络时。
说明: 一个套接字操作试图无法访问网络。 此错误通常意味着本地软件知道没有到达远程主机的路由。

WSAENETRESET (10052)
翻译: 网络上重置丢弃连接。
说明: 由于在操作过程中检测到失败时的 keep-alive 活动的连接被中断。 它还返回由 setsockopt (Wsapiref_94aa.asp) 如果尝试已失败的连接上设置 SO_KEEPALIVE。

WSAECONNABORTED (10053)
翻译: 软件造成连接中断。
说明: 一个已建立的连接已停止,软件在您的宿主计算机中可能是因数据传输超时或协议错误。

WSAECONNRESET (10054)
翻译: 通过对等方重置连接。
说明: 一个现有的连接被远程主机强行关闭。 如果突然停止对等程序在远程主机上的、 重新启动主机,或远程主机将使用硬盘关闭,通常会发生此错误。 有关远程套接字上 SO_LINGER 选项的详细信息,请参阅 setsockopt (Wsapiref_94aa.asp)。 如果因一个或多个操作正在进行时检测到失败时的 keep-alive 活动连接被中断,也可能会导致此错误。 正在进行的操作失败,出现 WSAENETRESET。 随后的操作失败,出现 WSAECONNRESET。

WSAENOBUFS (10055)
翻译: 没有可用的缓冲空间。
说明: 由于系统缺乏足够的缓冲区空间,或因为队列已满,不能执行套接字的操作。

WSAEISCONN (10056)
翻译: 套接字已连接。
说明: 一个已连接套接字上发出的连接请求。 某些实现还此如果调用返回错误 sendto (Wsapiref_4sqa.asp) 是已连接的 SOCK_DGRAM 套接字上 (对于 sendto (Wsapiref_4sqa.asp) 中收件人参数上的 SOCK_STREAM 套接字将被忽略) 尽管其他实现将此视为有效的匹配项。

WSAENOTCONN (10057)
翻译: 套接字未连接。
说明: 不允许发送或接收数据的请求,因为套接字未连接且 (当使用 sendto [Wsapiref_4sqa.asp] 数据文报套接字上发送,已提供没有地址)。 任何其他类型的操作也可能会返回此错误中 setsockopt (Wsapiref_94aa.asp) 如果连接重置设置 SO_KEEPALIVE 的示例。

WSAESHUTDOWN (10058)
翻译: 套接字关闭后无法发送。
说明: 由于套接字有已被关闭,因此在与以前的关闭 (Wsapiref_60z6.asp) 调用该方向,不允许发送或接收数据的请求。 当调用一个关机时,套接字的分部关闭请求。 这是一个信号,发送或接收进程 (或两者) 已经被中止。

WSAETIMEDOUT (10060)
翻译: 连接超时。
说明: 由于连接的方没有正确响应时间,一段时间后或建立的连接失败,因为连接的主机未能响应的连接尝试失败。

WSAECONNREFUSED (10061)
翻译: 连接被拒绝。
说明: 进行未连接,因为目标计算机主动拒绝它。 尝试连接到处于非活动状态外主机就是一个不具有运行服务器程序上的服务通常会导致此错误。

WSAEHOSTDOWN (10064)
翻译: 主机已关闭。
说明: 一个套接字操作失败,因为目标主机已关闭。 套接字操作遇到死的主机。 不初始化本地主机上的网络活动。 这些条件就是由错误 WSAETIMEDOUT 指示的可能性更大。

WSAEHOSTUNREACH (10065)
翻译: 没有到主机的路由。
说明: 无法连接主机已尝试的套接字操作。 请参阅 WSAENETUNREACH。

WSAEPROCLIM (10067)
翻译: 太多的进程。
说明: 一个 Windows 套接字实现可能可以同时使用它的程序数目上有限制。 如果达到限制 WSAStartup (Wsapiref_1v8y.asp) 可能会失败,此错误。

WSASYSNOTREADY (10091)
翻译: 网络子系统不可用。
说明: 如果 Windows 套接字实现当前无法正常工作,因为它用来提供网络服务的基础系统当前不可用,则通过 WSAStartup (Wsapiref_1v8y.asp) 返回此错误。 确认下列事项:
确认当前路径中相应的 Windows 套接字 DLL 文件。
确认它们不尝试在同一时间使用多个 Windows 套接字实现。
如果有多个) Winsock DLL 在系统上,确认适当网络子系统当前加载的第一个的 Winsock DLL,在路径中。
请确认所有必需的组件目前已安装并正确配置根据为 Windows 套接字实现文档。

WSAVERNOTSUPPORTED (10092)
转换: 超出范围 Winsock.dll 版本。
说明: 的当前 Windows 套接字实现不支持所请求的程序在 Windows 套接字规范版本。 请确保访问没有旧的 Windows 套接字 DLL 文件。

WSANOTINITIALISED (10093)
翻译: 还未执行的成功 WSAStartup。
说明: 是该程序不具有称为 WSAStartup (Wsapiref_1v8y.asp) 或 WSAStartup (Wsapiref_1v8y.asp) 失败。 该程序可能正在访问不属于当前的活动任务的套接字 (也就其试图共享的任务之间的一套接字),或 WSACleanup 调用次数太多。

WSAEDISCON (10101)
翻译: 正常关机正在进行中的。
说明: 由 WSARecv (Wsapiref_4z1u.asp) 和 WSARecvFrom (Wsapiref_4wky.asp) 指示远程方已启动正常关机顺序返回此错误。

WSATYPE_NOT_FOUND (10109)
翻译: 类别找不到的类型。
说明: 找不到指定的类。

WSAHOST_NOT_FOUND (11001)
翻译: 找不到主机。 没有这类主机是已知的。
说明: 名称不是正式的主机名或别名,或未找到被查询数据库中。 返回此错误可能还会为协议和服务查询以及它意味着在相关数据库中找不到指定的名称。

WSATRY_AGAIN (11002)
翻译: 找不到非权威主机。
说明: 此错误通常是临时的错误过程中解析主机名称和它意味着本地服务器没有从权威服务器收到响应。 在某些时候稍后重试可能成功。

WSANO_RECOVERY (11003)
翻译: 这是用于 nonrecoverable 的错误。
说明: 此错误表明在数据库查找中出现某种排序 nonrecoverable 的错误。 如果找不到数据库文件 (渚嬪 BSD 兼容 HOSTS、 服务,或协议文件),或者出现严重错误,服务器返回了一个 DNS 请求,则可能发生此错误。

WSANO_DATA (11004)
翻译: 有效的名称、 请求类型的任何数据记录。
说明: 请求的名称有效并且已在数据库中找到,但它没有正确正在被解析为的关联的数据。 这对于典型的示例尝试就是一个主机名到地址转换 (使用 gethostbyname [Wsapiref_0q5u.asp] 或 WSAAsyncGetHostByName [Wsapiref_7bhu.asp]) 使用 DNS 服务器的。 MX 记录,则返回但没有 A 记录。 这意味着主机本身存在,但不是直接可达。

WSA_INVALID_HANDLE (操作系统依赖)
翻译: 指定事件对象句柄无效。
说明: 一个程序试图使用一个事件对象,但指定的句柄则无效。

WSA_INVALID_PARAMETER (操作系统依赖)
翻译: 一个或多个参数均无效。
说明: 一个程序使用一个 Windows 套接字函数直接映射到 Win32 函数。 Win32 函数时,该值指示一个或多个参数有问题。

WSA_IO_INCOMPLETE (操作系统依赖)
翻译: 重叠的 I/O 事件对象不在终止状态。
说明: 程序已尝试确定尚未完成的重叠操作的状态。 该操作完成之前,确定重叠的操作已完成时轮询模式中使用 WSAGetOverlappedResult (与 fWait 标志设置为 FALSE) 的程序将收到此错误代码。

WSA_IO_PENDING (操作系统依赖)
翻译: 重叠的操作将在以后完成。
说明: 程序初始化了无法立即完成一个重叠的操作。 完成操作时,将以后发送完成指示。

WSA_NOT_ENOUGH_MEMORY (操作系统依赖)
翻译: 可用内存不足。
说明: 一个程序使用一个 Windows 套接字函数直接映射到 Win32 函数。 Win32 函数,它指示缺少所需的内存资源。

WSA_OPERATION_ABORTED (操作系统依赖)
翻译: 重叠操作中止。
说明: 由于套接字已关闭或 WSAIoctl (Wsapiref_6ik2.asp) 中的 SIO_FLUSH 命令已运行了一个重叠的操作被取消。

WSAINVALIDPROCTABLE (操作系统依赖)
翻译: 无效的过程从服务提供商的表。
说明: A 服务提供程序返回无效的过程表到 Ws2_32.dll。 (这是通常由于一个或多个正在空的函数指针)。

WSAINVALIDPROVIDER (操作系统依赖)
翻译: 无效的服务提供程序的版本号。
说明: A 服务提供程序返回 2.0 以外的版本号。

WSAPROVIDERFAILEDINIT (操作系统依赖)
转换: 无法初始化服务提供商。
说明: 不能是一个服务提供商的 DLL 加载 (失败 LoadLibrary) 或提供商的 WSPStartup/NSPStartup 函数失败。

WSASYSCALLFAILURE (操作系统依赖)
翻译: 系统调用失败。
说明: 应永不失败的系统调用失败时,将返回此错误。 渚嬪如果 WaitForMultipleObjects 调用失败或其中一个注册表函数失败试图更改协议或 $ 名称空间编录,将发生此错误。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是处理`send`函数返回-1的C++代码示例: ```c++ // 创建套接字 SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (sock == INVALID_SOCKET) { printf("Create socket failed with error code: %d\n", WSAGetLastError()); return 1; } // 连接到目标主机 struct sockaddr_in serverAddr; memset(&serverAddr, 0, sizeof(serverAddr)); serverAddr.sin_family = AF_INET; serverAddr.sin_addr.s_addr = inet_addr("目标主机IP地址"); serverAddr.sin_port = htons(目标主机端口号); if (connect(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr)) == SOCKET_ERROR) { printf("Connect failed with error code: %d\n", WSAGetLastError()); closesocket(sock); return 1; } // 发送数据 const char* sendData = "Hello, world!"; int sendLen = strlen(sendData); while (sendLen > 0) { int ret = send(sock, sendData, sendLen, 0); if (ret == SOCKET_ERROR) { printf("Send data failed with error code: %d\n", WSAGetLastError()); closesocket(sock); return 1; } else if (ret == 0) { printf("Send buffer is full\n"); Sleep(1000); // 等待1秒后重试发送 } else { sendData += ret; sendLen -= ret; } } // 关闭套接字 closesocket(sock); ``` 在上面的代码中,我们通过调用`send`函数来发送数据,并且在`send`函数返回-1时,通过调用`WSAGetLastError`函数来获取具体的错误代码并进行适当的处理。如果`send`函数返回0,则表示发送缓冲区已满,我们可以通过等待一段时间后重试发送来解决这个问题。 需要注意的是,在使用`send`函数发送数据时,我们可能需要对发送缓冲区和网络连接进行适当的调整和优化,以避免出现发送缓冲区已满的情况。同时,我们也需要对`WSAGetLastError`函数返回错误代码进行适当的处理,以确保程序的稳定性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值