当前位置 博文首页 > 文章内容

    Windows Socket套接字(四)-Windows套接字错误代码:Greless的后花园

    作者:shunshunshun18 栏目:未分类 时间:2021-10-17 20:54:03

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    推荐 IIS7批量FTP管理工具 IIS7批量FTP管理
    IIS7批量FTP管理功能说明:
    1、可批量导入,导出FTP信息
    2、其他ftp工具有的功能,我们也有
    3、特色功能:可以定时上传下载
    4、数据信息列表化、一眼就能知道那个是那个
    5、批量连接 标签页式切换 方便快捷
    6、7大连接模式 更多好的兼容
    7、内嵌编辑器 有效解决普通txt记事本乱码
    8、锁屏功能 当程序有规定时间内没人操作,则自动锁程序。输入密码才可以正常操作

    本产品适用于:懒得记录FTP信息和有批量定时备份,上传下载的运维或站长。

    图:


    IIS7批量FTP管理

    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