标题：WSAGetLastError()
简述:
获得上次失败操作的错误状态.
#include <winsock.h>
int PASCAL FAR WSAGetLastError ( void );
注释: 
该函数返回上次发生的网络错误.当一特定的Windows Sockets API函数指出一个错误已经发生,该函数就应调用来获得对应的错误代码.
返回值: 
返回值指出了该线程进行的上一次Windows Sockets API函数调用时的错误代码.
关于Windows Sockets提供者的说明：
这里使用WSAGetLastError()函数来获得上一次的错误代码,而不是依靠全局错误变量, 是为了提供和将来的多线程环境相兼容.
注意在一个非占先的Windows环境下,WSAGetLastError()只用来获得Windows Sockets API错误.在占先环境下,WSAGetLastError()将调用GetLastError(), 来获得所有在每线程基础上的Win32 API函数的错误状态.为提高可移植性,应用程序应在调用失败后立即使用WSAGetLastError().
参见:
WSASetLastError()
WSAGetLastError()函数常见返回值
10 0 0 4 —W S A E I N T R 
函数调用中断。该错误表明由于对W S A C a n c e l Bl o c k i n g C a l l 的调用，造成了一次调用被强
行中断。
1 0 0 0 9 —W S A E B A D F 
文件句柄错误。该错误表明提供的文件句柄无效。在MicrosoftWindows CE 下，s o c k e t 函
数可能返回这个错误，表明共享串口处于“忙”状态。
1 0 0 1 3 —W S A E A C C E S 
权限被拒。尝试对套接字进行操作，但被禁止。若试图在se n d t o 或W S A S e n d To 中使用一
个广播地址，但是尚未用s e t s o c k o p t 和S O _ B R O A D C A S T 这两个选项设置广播权限，便会产生
这类错误。
1 0 0 1 4 —W S A E FA U LT 
地址无效。传给Wi n s o c k 函数的指针地址无效。若指定的缓冲区太小，也会产生这个错
误。
1 0 0 2 2 —W S A E I N VA L 
参数无效。指定了一个无效参数。例如，假如为WS A I o c t l 调用指定了一个无效控制代码，
便会产生这个错误。另外，它也可能表明套接字当前的状态有错，例如在一个目前没有监听
的套接字上调用a c c e p t 或W S A A c c e p t 。
1 0 0 2 4 —W S A E M F I L E 
打开文件过多。提示打开的套接字太多了。通常，Mi c r o s o f t 提供者只受到系统内可用资
源数量的限制。
1 0 0 3 5 —W S A E W O U L D B L O C K 
资源暂时不可用。对非锁定套接字来说，如果请求操作不能立即执行的话，通常会返回
这个错误。比如说，在一个非暂停套接字上调用co n n e c t ，就会返回这个错误。因为连接请求
不能立即执行。
1 0 0 3 6 —W S A E I N P R O G R E S S 
操作正在进行中。当前正在执行非锁定操作。一般来说不会出现这个错误，除非正在开
发1 6 位Wi n s o c k 应用程序。
1 0 0 3 7 —W S A E A L R E A D Y 
操作已完成。一般来说，在非锁定套接字上尝试已处于进程中的操作时，会产生这个错
误。比如，在一个已处于连接进程的非锁定套接字上，再一次调用co n n e c t 或W S A C o n n e c t 。
另外，服务提供者处于执行回调函数（针对支持回调例程的Win s o c k 函数）的进程中时，也会?出现这个错误。
1 0 0 3 8 —W S A E N O T S O C K 
无效套接字上的套接字操作。任何一个把SO C K E T 句柄当作参数的Wi n s o c k 函数都会返回
这个错误。它表明提供的套接字句柄无效。
1 0 0 3 9 —W S A E D E S TA D D R R E Q 
需要目标地址。这个错误表明没有提供具体地址。比方说，假如在调用se n d t o 时，将目标
地址设为I N A D D R _ A N Y （任意地址），便会返回这个错误。
1 0 0 4 0 —W S A E M S G S I Z E 
消息过长。这个错误的含义很多。如果在一个数据报套接字上发送一条消息，这条消息
对内部缓冲区而言太大的话，就会产生这个错误。再比如，由于网络自身的限制，使一条消
息过长，也会产生这个错误。最后，如果收到数据报之后，缓冲区太小，不能接收消息时，
也会产生这个错误。
1 0 0 4 1 —W S A E P R O TO T Y P E 
套接字协议类型有误。在s o c k e t 或W S A S o c k e t 调用中指定的协议不支持指定的套接字类型。
比如，要求建立S O C K _ S T R E A M 类型的一个I P 套接字，同时指定协议为I P P R O TO _ U D P ，便
会产生这样的错误。
1 0 0 4 2 —W S A E N O P R O TO O P T 
协议选项错误。表明在g e t s o c k o p t 或s e t s o c k o p t 调用中，指定的套接字选项或级别不明、未
获支持或者无效。
1 0 0 4 3 ——W S A E P R O TO N O S U P P O RT 
不支持的协议。系统中没有安装请求的协议或没有相应的实施方案。比如，如果系统中
没有安装T C P / I P ，而试着建立T C P 或U D P 套接字时，就会产生这个错误。
1 0 0 4 4 —W S A E S O C K T N O S U P P O RT 
不支持的套接字类型。对指定的地址家族来说，没有相应的具体套接字类型支持。比如，
在向一个不支持原始套接字的协议请求建立一个SO C K _ R AW 套接字类型时，就会产生这个错
误。
1 0 0 4 5 —W S A E O P N O T S U P P 
不支持的操作。表明针对指定的对象，试图采取的操作未获支持。通常，如果试着在一
个不支持调用Wi n s o c k 函数的套接字上调用了Wi n s o c k 时，就会产生这个错误。比如，在一个
数据报套接字上调用a c c e p t 或W S A A c c e p t 函数时，就会产生这样的错误。
1 0 0 4 6 —W S A E P F N O S U P P O RT 
不支持的协议家族。请求的协议家族不存在，或系统内尚未安装。多数情况下，这个错
误可与W S A E A F N O S U P P ORT 互换（两者等价）；后者出现得更为频繁。
1 0 0 4 7 —W S A E A F N O S U P P O RT 
地址家族不支持请求的操作。对套接字类型不支持的操作来说，在试着执行它时，就会
出现这个错误。比如，在类型为S O C K _ S T R E AM 的一个套接字上调用s e n d t o 或W S A S e n d To 函
数时，就会产生这个错误。另外，在调用so c k e t 或W S A S o c k e t 函数的时候，若同时请求了一个
无效的地址家族、套接字类型及协议组合，也会产生这个错误。
1 0 0 4 8 —W S A E A D D R I N U S E 
482 计计第四部分附附录录录
下载?地址正在使用。正常情况下，每个套接字只允许使用一个套接字地址（例如，一个I P 套
接字地址由本地I P 地址及端口号组成）。这个错误一般和b i n d 、c o n n e c t 和W S A C o n n e c t 这三个
函数有关。可在s e t s o c k o p t 函数中设置套接字选项S O _ R E U S E A D D R ，允许多个套接字访问同
一个本地I P 地址及端口号。
1 0 0 4 9 —W S A E A D D R N O TAVA I L 
不能分配请求的地址。A P I 调用中指定的地址对那个函数来说无效时，就会产生这样的错
误。例如，若在b i n d 调用中指定一个I P 地址，但却没有对应的本地I P 接口，便会产生这样的错
误。另外，通过c o n n e c t 、W S A C o n n e c t 、se n d t o 、W S A S e n d To 和W S A J o i n L e a f 这四个函数为
准备连接的远程计算机指定端口0 时，也会产生这样的错误。
1 0 0 5 0 —W S A E N E T D O W N 
网络断开。试图采取一项操作时，却发现网络连接中断。这可能是由于网络堆栈的错误，
网络接口的故障，或者本地网络的问题造成的。
1 0 0 5 1 —W S A E N E T U N R E A C H 
网络不可抵达。试图采取一项操作时，却发现目标网络不可抵达（不可访问）。这意味着
本地主机不知道如何抵达一个远程主机。换言之，目前没有已知的路由可抵达那个目标主机。
1 0 0 5 2 —W S A E N E T R E S E T 
网络重设时断开了连接。由于“保持活动”操作检测到一个错误，造成网络连接的中断。
若在一个已经无效的连接之上，通过s e t s o c k o p t函数设置S O _ K E E PA L I V E 选项，也会出现这样
的错误。
1 0 0 5 3 —W S A E C O N N A B O RT E D 
软件造成连接取消。由于软件错误，造成一个已经建立的连接被取消。典型情况下，这
意味着连接是由于协议或超时错误而被取消的。
1 0 0 5 4 —W S A E C O N N R E S E T 
连接被对方重设。一个已经建立的连接被远程主机强行关闭。若远程主机上的进程异常
中止运行（由于内存冲突或硬件故障），或者针对套接字执行了一次强行关闭，便会产生这样
的错误。针对强行关闭的情况，可用S O _ L I N G E R 套接字选项和s e t s o c k o p t 来配置一个套接字。
1 0 0 5 5 —W S A E N O B U F S 
没有缓冲区空间。由于系统缺少足够的缓冲区空间，请求的操作不能执行。
1 0 0 5 6 —W S A E I S C O N N 
套接字已经连接。表明在一个已建立连接的套接字上，试图再建立一个连接。要注意的
是，数据报和数据流套接字均有可能出现这样的错误。使用数据报套接字时，假如事先已通
过c o n n e c t 或W S A C o n n e c t 调用，为数据报通信关联了一个端点的地址，那么以后试图再次调
用s e n d t o 或W S A S e n d To ，便会产生这样的错误。
1 0 0 5 7 —W S A E N O T C O N N 
套接字尚未连接。若在一个尚未建立连接的“面向连接”套接字上发出数据收发请求，
便会产生这样的错误。
1 0 0 5 8 —W S A E S H U T D O W N 
套接字关闭后不能发送。表明已通过对sh u t d o w n 的一次调用，部分关闭了套接字，但事
附录C 计Winsock 错误代码计计483 下载?后又请求进行数据的收发操作。要注意的是，这种错误只会在已经关闭的那个数据流动方向
上才会发生。举个例子来说，完成数据发送后，若调用sh u t d o w n ，那么以后任何数据发送调
用都会产生这样的错误。
1 0 0 6 0 —W S A E T I M E D O U T 
连接超时。若发出了一个连接请求，但经过规定的时间，远程计算机仍未作出正确的响
应（或根本没有任何响应），便会发生这样的错误。要想收到这样的错误，通常需要先在套接
字上设置好S O _ S N D T I M E O 和S O _ R C V T I M E O 选项，然后调用co n n e c t 及W S A C o n n e c t 函数。
要想了解在套接字上设置S O _ S N D T I M E O 和S O _ R C V T I M E O 选项的详情，可参考第9 章。
1 0 0 6 1 —W S A E C O N N R E F U S E D 
连接被拒。由于被目标机器拒绝，连接无法建立。这通常是由于在远程机器上，没有任
何应用程序可在那个地址之上，为连接提供服务。
1 0 0 6 4 —W S A E H O S T D O W N 
主机关闭。这个错误指出由于目标主机关闭，造成操作失败。然而，应用程序此时更有
可能收到的是一条W S A E T I M E D O U T （连接超时）错误，因为对方关机的情况通常是在试图
建立一个连接的时候发生的。
1 0 0 6 5 —W S A E H O S T U N R E A C H 
没有到主机的路由。应用程序试图访问一个不可抵达的主机。该错误类似于
W S A E N E T U N R E A C H 。
1 0 0 6 7 —W S A E P R O C L I M 
进程过多。有些Wi n s o c k 服务提供者对能够同时访问它们的进程数量进行了限制。
1 0 0 9 1 —W S A S Y S N O T R E A D Y 
网络子系统不可用。调用W S A S t a r t u p 时，若提供者不能正常工作（由于提供服务的基层
系统不可用），便会返回这种错误。
1 0 0 9 2 —W S AV E R N O T S U P P O RT E D 
Wi n s o c k . d l l 版本有误。表明不支持请求的Wi n s o c k 提供者版本。
1 0 0 9 3 —W S A N O T I N I T I A L I S E D 
Wi n s o c k 尚未初始化。尚未成功完成对W S A S t a r t u p 的一次调用。
1 0 1 0 1 —W S A E D I S C O N 
正在从容关闭。这个错误是由W S A R e c v 和W S A R e c v F r o m返回的，指出远程主机已初始
化了一次从容关闭操作。该错误是在像AT M 这样的“面向消息”协议上发生的。
1 0 1 0 2 —W S A E N O M O R E 
找不到更多的记录。这个错误自W S A L o o k u p S e r v i c e N e x t 函数返回，指出已经没有留下更
多的记录。这个错误通常可与W S A _ E _ N O _ M O R E 互换使用。在应用程序中，应同时检查这个
错误以及W S A _ E _ N O _ M O R E 。
1 0 1 0 3 —W S A E C A N C E L L E D 
操作被取消。这个错误指出当W S A L o o k u p S e r v i c e N e x t 调用仍在处理期间，发出了对
W S A L o o k u p S e r v i c e E n d （服务中止）的一个调用。此时，W SA L o o k u p S e r v i c e N e x t 便会返回这
个错误。这个错误代码可与W S A _ E _ C A N C E L L E D 互换使用。作为应用程序，应同时检查这
个错误以及W S A _ E _ C A N C E L L E D 。
484 计计第四部分附附录录录
下载?1 0 1 0 4 —W S A E I N VA L I D P R O C TA B L E 
进程调用表无效。该错误通常是在进程表包含了无效条目的情况下，由一个服务提供者
返回的。欲知服务提供者的详情，可参考第1 4 章。
1 0 1 0 5 —W S A E I N VA L I D P R O V I D E R 
无效的服务提供者。这个错误同服务提供者关联在一起，在提供者不能建立正确的
Wi n s o c k 版本，从而无法正常工作的前提下产生。
1 0 1 0 6 —W S A E P R O V I D E R FA I L E D I N I T 
提供者初始化失败。这个错误同服务提供者关联在一起，通常见于提供者不能载入需要
的D L L 时。
1 0 1 0 7 —W S A S Y S C A L L FA I L U R E 
系统调用失败。表明绝对不应失败的一个系统调用却令人遗憾地失败了。
1 0 1 0 8 —W S A S E RV I C E _ N O T _ F O U N D 
找不到这样的服务。这个错误通常与注册和名字解析函数相关，在查询服务时产生（第
1 0 章对这些函数进行了详尽解释）。该错误表明，在给定的名字空间内，找不到请求的服务。
1 0 1 0 9 —W S AT Y P E _ N O T _ F O U N D 
找不到类的类型。该错误也与注册及名字解析函数关联在一起，在处理服务类（S e r v i c e 
C l a s s ）时发生。若注册好一个服务的实例，它必须引用一个以前通过W S A I n s t a l l S e r v i c e C l a s s 
安装好的服务。
1 0 11 0 —W S A _ E _ N O _ M O R E 
找不到更多的记录。这个错误是自W S A L o o k u p S e r v i c e N e x t 调用返回的，指出已经没有剩
下的记录。该错误通常可与W S A E N O M O R E 互换使用。作为一个应用程序，应同时检查这个
错误以及W S A E N O M O R E 。
1 0 111 —W S A _ E _ C A N C E L L E D 
操作被取消。该错误指出在对W S A L o o k u p S e r v i c e N e x t 的调用尚未完成的时候，又发出了
对W S A L o o k u p S e r v i c e E n d （中止服务）的一个调用。这样，W SA L o o k u p S e r v i c e N e x t 就会返回
该错误。这个错误代码可与W S A E C A N C E L L E D 互换使用。作为一个应用程序，应同时检查
这个错误以及W S A E C A N C E L L E D 。
1 0 11 2 —W S A E R E F U S E D 
查询被拒。由于被主动拒绝，所以一个数据库查询操作失败。
11 0 0 1 —W S A H O S T _ N O T _ F O U N D 
主机没有找到。这个错误是在调用g e t h o s t b y n a m e 和g e t h o s t b y a dd r 时产生的，表明没有找
到一个授权应答主机（Authoritative Answer Host ）。
11 0 0 2 —W S AT RY _ A G A I N 
非授权主机没有找到。这个错误也是在调用g e t h o s t b y n a m e 和g e t h o s t b y a dd r 时产生的，表
明没有找到一个非授权主机，或者遇到了服务器故障。
11 0 0 3 —W S A N O _ R E C O V E RY 
遇到一个不可恢复的错误。这个错误也是在调用g e t h o s t b y n a m e 和g e t h o s t b y a dd r 时产生的，
指出遇到一个不可恢复的错误，应再次尝试操作。
11 0 0 4 —W S A N O _ D ATA 
附录C 计Winsock 错误代码计计485 下载?没有找到请求类型的数据记录。这个错误也是在调用g e t h o s t b y n a m e 和g e t h o s t b y a dd r 时产
生的，指出尽管提供的名字有效，但却没有找到与请求类型对应的数据记录。
11 0 0 5 —W S A _ Q O S _ R E C E I V E R S 
至少有一条预约消息抵达。这个值同I P 服务质量（Q o S ）有着密切的关系，其实并不是一
个真正的“错误”（Q o S 的详情见第1 2 章）。它指出网络上至少有一个进程希望接收Q o S 通信。
11 0 0 6 —W S A _ Q O S _ S E N D E R S 
至少有一条路径消息抵达。这个值同Q o S 关联在一起，其实更像一种状态报告消息。它指
出在网络上，至少有一个进程希望进行Q o S 数据的发送。
11 0 0 7 —W S A _ Q O S _ N O _ S E N D E R S 
没有Q o S 发送者。这个值同Q o S 关联在一起，指出不再有任何进程对Q o S 数据的发送有兴
趣。请参阅第1 2 章，了解在发生这样的错误时，对所发生情况的一系列完整说明。
11 0 0 8 —W S A _ Q O S _ N O _ R E C E I V E R S 
没有Q o S 接收者。这个值同Q o S 关联在一起，指出不再有任何进程对Q o S 数据的接收有兴
趣。请参阅第1 2 章，查阅对这个错误的完整说明。
11 0 0 9 —W S A _ Q O S _ R E Q U E S T _ C O N F I R M E D 
预约请求已被确认。Q o S 应用可事先发出请求，希望在批准了自己对网络带宽的预约请求
后，收到通知。若发出了这样的请求，一旦批准，便会收到这样的消息。请参阅第1 2 章，了
解对此消息的详细说明。
11 0 1 0 —W S A _ Q O S _ A D M I S S I O N _ FA I L U R E 
缺乏资源致错。资源不够，以至于无法满足Q o S 带宽请求。
11 0 11 —W S A _ Q O S _ P O L I C Y _ FA I L U R E 
证书无效。表明发出Q o S 预约请求的时候，要么用户并不具备正确的权限，要么提供的证
书无效。
11 0 1 2 —W S A _ Q O S _ B A D _ S T Y L E 
未知或冲突的样式。Q o S 应用程序可针对一个指定的会话，建立不同的过滤器样式。若出
现这一错误，表明指定的样式类型要么未知，要么存在冲突。请参阅第1 2 章，了解对过滤器
样式的详细说明。
11 0 1 3 —W S A _ Q O S _ B A D _ O B J E C T 
无效的F I LT E R S P E C 结构或者提供者特有对象。假如为Q oS 对象提供的F I LT E R S P E C 结构
无效，或者提供者特有的缓冲区无效，便会返回这样的错误，详见第1 2 章。
11 0 1 4 —W S A _ Q O S _ T R A F F I C _ C T R L _ E R R O R 
F L O W S P E C 有问题。假如通信控制组件发现指定的F L O W S P E C 参数存在问题（作为Q o S 
对象的一个成员传递），便会返回这样的错误。
11 0 1 5 —W S A _ Q O S _ G E N E R I C _ E R R O R 
常规Q o S 错误。这是一个比较泛泛的错误；假如其他Q o S 错误都不适合，便返回这个错误。
6 —W S A _ I N VA L I D _ H A N D L E 
指定的事件对象无效。若使用与Wi n 3 2 函数对应的Wi n s o c k 函数，便有可能产生这样的
Wi n 3 2 错误。它表明传递给W S AWa i t F o r M u l t i p l e E v e n t s 的一个句柄是无效的。
8 —W S A _ N O T _ E N O U G H _ M E M O RY 
486 计计第四部分附附录录录
下载?内存不够。这个Wi n 3 2 错误指出内存数量不足，无法完成指定的操作。
8 7 —W S A _ I N VA L I D _ PA R A M E T E R 
一个或多个参数无效。这个Wi n 3 2 错误表明传递到函数内部的参数无效。假若事件计数参
数无效，那么在执行W S AWa i t F o r M u l t i p l e E v e n t s 的时候，也会发生这样的错误。
2 5 8 —W S A _ WA I T _ T I M E O U T 
操作超时。这个Wi n 3 2 错误指出重叠I / O 操作未在规定的时间内完成。
9 9 5 —W S A _ O P E R AT I O N _ A B O RT E D 
重叠操作被取消。这个Wi n 3 2 错误指出由于套接字的关闭，造成一次重叠I / O 操作的取消。
除此以外，该错误也可能在执行S I O _ F L U S H 这个I / O 控制命令时出现。
9 9 6 —W S A _ I O _ I N C O M P L E T E 
重叠I / O 事件对象未处于传信状态。这个Wi n 3 2 错误也和重叠I / O 操作密切相关，在调用
W S A G e t O v e r l a p p e d R e s u l t s 函数的时候产生，指出重叠I /O 操作尚未完成。
9 9 7 —W S A _ I O _ P E N D I N G 
重叠操作将在以后完成。用Wi n s o c k 函数发出一次重叠I / O 操作时，若出现这样的Wi n 3 2 错
误，便表明操作尚未完成，而且会在以后的某个时间完成。