socket错误详解

合集下载

socket error 10053,10054究竟是怎么引起的

socket error 10053,10054究竟是怎么引起的

贴2段能稳定重现10053的代码,下面是客户端:[cpp]view plaincopy1.WORD VersionRequested;2.WSADATA WsaData;3.4.VersionRequested = MAKEWORD(2, 2);5.6.if (WSAStartup(VersionRequested, &WsaData))7.return -1;8.9.SOCKET SocketServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);10.SOCKADDR_IN AddrServer;11.AddrServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");12.AddrServer.sin_port = htons(9999);13.AddrServer.sin_family = AF_INET;14.15.// 连接服务器16.if (0 != connect(SocketServer, (SOCKADDR *)&AddrServer, sizeof(SOCKADDR)))17.{18. closesocket(SocketServer);19.return false;20.}21.22.int err = 0;23.char temp[] = "hello, server";24.int rs = send(SocketServer, temp, sizeof(temp) + 1, 0);25.26.char buff[1024] = {0};27.rs = recv(SocketServer, buff, sizeof(buff), 0);28.29.// 下面这2句代码如果注释掉,后面的recv就能正解的返回0。

如果不注释掉,recv就会返回-1,30.// 并得到10053这个错误31.rs = send(SocketServer, temp, sizeof(temp) + 1, 0);32.err = WSAGetLastError();33.34.rs = recv(SocketServer, buff, sizeof(buff), 0);35.err = WSAGetLastError();36.37.system("pause");38.return 0;这个是服务器的:[cpp]view plaincopy1.WORD VersionRequested;2.WSADATA WsaData;3.4.VersionRequested = MAKEWORD(2, 2);5.6.if (WSAStartup(VersionRequested, &WsaData))7.{8. printf("加载socket库失败!\n");9.return -1;10.}11.12.// 监听来自浏览器的请求13.SOCKET SockServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);14.SOCKADDR_IN AddrClient;15.AddrClient.sin_family = AF_INET;16.AddrClient.sin_addr.s_addr = INADDR_ANY;17.AddrClient.sin_port = htons(9999);18.19.if (SockServer == INVALID_SOCKET)20.{21. printf("socket初始化失败!\n");22. closesocket(SockServer);23. WSACleanup();24.return -1;25.}26.27.if (bind(SockServer, (sockaddr*)&AddrClient, sizeof(AddrClient)) != 0)28.{29. printf("socket绑定失败!\n");30. closesocket(SockServer);31. WSACleanup();32.return -1;33.}34.35.if (listen(SockServer, 10) != 0)36.{37. printf("socket监听失败!\n");38. closesocket(SockServer);39. WSACleanup();40.return -1;41.}42.43.while (1)44.{45. SOCKET NewSocket = accept(SockServer, NULL, NULL);46.if (INVALID_SOCKET == NewSocket)47. {48. closesocket(NewSocket);49.continue;50. }51.else52. {53.struct linger so_linger;54. so_linger.l_onoff = 1;55. so_linger.l_linger = 30;56. setsockopt(NewSocket ,SOL_SOCKET, SO_LINGER, (const char*)&so_linger, sizeof(so_linger));57. }58.59.char buff[1024];60.int rs = recv(NewSocket, buff, sizeof(buff), 0);61.62.char temp[] = "hello, client";63. rs = send(NewSocket, temp, sizeof(temp) + 1, 0);64.65. closesocket(NewSocket);66.}10053里说的software在我的例子中指的就是那个send函数吗,是send函数执行的时候,发现对方的套接字已经关闭了,所以它把己方的套接字也关掉了吗,然后导致后续的recv 报错10053?出现10053的原因是因为在你执行这次send的时候对端已经执行过closesocket了,而发送的数据还是被成功的推入了发送缓冲区中,因此返回了0,此时你可能还没得到FIN消息,而紧接着recv这边就得到了对端关闭socket的FIN消息,因此此时需要放弃发送缓冲中的数据,异常终止连接,所以得到了10053错误:您的主机中的软件中止了一个已建立的连接。

Socket编程协议错误代码解析

Socket编程协议错误代码解析

10004—WSAEINTR函数调用中断。

该错误表明由于对WSACancelBlockingCall的调用,造成了一次调用被强行中断。

10009—WSAEBADF文件句柄错误。

该错误表明提供的文件句柄无效。

在MicrosoftWindowsCE下,socket函数可能返回这个错误,表明共享串口处于“忙”状态。

10013—WSAEACCES权限被拒。

尝试对套接字进行操作,但被禁止。

若试图在sendto或WSASendTo中使用一个广播地址,但是尚未用setsockopt和SO_BROADCAST这两个选项设置广播权限,便会产生这类错误。

10014—WSAEFAULT地址无效。

传给Winsock函数的指针地址无效。

若指定的缓冲区太小,也会产生这个错误。

10022—WSAEINVAL参数无效。

指定了一个无效参数。

例如,假如为WSAIoctl调用指定了一个无效控制代码,便会产生这个错误。

另外,它也可能表明套接字当前的状态有错,例如在一个目前没有监听的套接字上调用accept或WSAAccept。

10024—WSAEMFILE打开文件过多。

提示打开的套接字太多了。

通常,Microsoft提供者只受到系统内可用资源数量的限制。

10035—WSAEWOULDBLOCK资源暂时不可用。

对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误。

比如说,在一个非暂停套接字上调用connect,就会返回这个错误。

因为连接请求不能立即执行。

10036—WSAEINPROGRESS操作正在进行中。

当前正在执行非锁定操作。

一般来说不会出现这个错误,除非正在开发16位Winsock应用程序。

10037—WSAEALREADY操作已完成。

一般来说,在非锁定套接字上尝试已处于进程中的操作时,会产生这个错误。

比如,在一个已处于连接进程的非锁定套接字上,再一次调用connect或WSAConnect。

另外,服务提供者处于执行回调函数(针对支持回调例程的Winsock函数)的进程中时,也会出现这个错误。

socket异常解决方案

socket异常解决方案

socket异常解决方案
《Socket异常解决方案》
在开发网络应用程序时,我们经常会遇到socket异常的问题。

socket异常可能会导致网络连接失败,数据传输中断,甚至导
致程序崩溃。

在面对这些问题时,我们需要及时解决并找出根本原因。

首先,我们需要了解造成socket异常的可能原因。

常见的原
因包括网络连接问题,服务器故障,数据包丢失等。

在了解了可能的原因后,就需要针对性地解决这些问题。

解决socket异常的方案可能包括以下几点:
1. 检查网络连接:确认网络连接是否正常,尝试其他网络环境,比如切换到4G网络或者使用VPN连接。

如果网络连接出现
问题,可能是导致socket异常的原因之一。

2. 重启服务器:如果是服务器端出现了问题,可以尝试重启服务器或者联系服务器管理员进行排查。

3. 检查数据包:数据包丢失可能会导致socket异常,对于这
种情况,我们可以使用数据包监控工具来检查数据传输情况,找出问题所在。

4. 异常处理:在程序中加入异常处理机制是很重要的,比如捕获socket异常并进行相应的处理,比如重新连接,重传数据
等。

5. 更新软件版本:有时socket异常可能是由于软件版本过低或者存在bug所致,及时更新软件版本可能解决这些问题。

总之,解决socket异常需要综合考虑网络环境、服务器端和客户端的问题,及时采取合理的措施来解决和避免出现异常情况。

希望上述的解决方案能帮助大家更好地解决socket异常的问题。

socket错误码(精品)

socket错误码(精品)

Sockets/Windows Sockets错误码Windows Sockets在头文件winsock.h中定义了所有的错误码,它们包括以“WSA”打头的Windows Sockets实现返回的错误码和Berkeley Sockets定义的错误码全集。

定义Berkeley Sockets错误码是为了确保原有软件的可移植性。

WSAEACCES (10013) Permission denied.试图使用被禁止的访问权限去访问套接字。

例如,在没有使用函数setsockopt()的SO_BROADCAST命令设置广播权限的套接字上使用函数sendto()给一个广播地址发送数据。

WSAEADDRINUSE (10048)Address already in use.正常情况下每一个套接字地址(协议/IP地址/端口号)只允许使用一次。

当应用程序试图使用bind()函数将一个被已存在的或没有完全关闭的或正在关闭的套接字使用了的IP地址/端口号绑扎到一个新套接字上时,该错误发生。

对于服务器应用程序来说,如果需要使用bind()函数将多个套接字绑扎到同一个端口上,可以考虑使用setsockopt()函数的SO_REUSEADDR命令。

客户应用程序一般不必使用bind()函数——connect()函数总是自动选择没有使用的端口号。

当bind()函数操作的是通配地址(包括ADDR_ANY)时,错误WSAEADDRINUSE可能延迟到一个明确的地址被提交时才发生。

这可能在后续的函数如connect()、listen()、WSAConnect()或WSAJoinLeaf()调用时发生。

WSAEADDRNOTAVAIL (10049)Cannot assign requested address.被请求的地址在它的环境中是不合法的。

通常地在bind()函数试图将一个本地机器不合法的地址绑扎到套接字时产生。

它也可能在connect()、sendto()、WSAConnect()、WSAJoinLeaf()或WSASendTo()函数调用时因远程机器的远程地址或端口号非法(如0地址或0端口号)而产生。

Socket的错误码和描述

Socket的错误码和描述

Socket的错误码和描述Socket的错误码和描述(中英文翻译)//下面是Socket Error的错误码和描述:Socket error 0 - Directly send errorSocket error 10004 - Interrupted function //call 操作被终止Socket error 10013 - Permission denied //c访问被拒绝Socket error 10014 - Bad address //c地址错误Socket error 10022 - Invalid argument //参数错误Socket error 10024 - Too many open files // 打开太多的socketsSocket error 10035 - Resource temporarily unavailable // 没有可以获取的资料Socket error 10036 - Operation now in progress // 一个阻塞操作正在进行中Socket error 10037 - Operation already in progress // 操作正在进行中Socket error 10038 - Socket operation on non-socket //非法的socket对象在操作Socket error 10039 - Destination address required //目标地址错误Socket error 10040 - Message too long //数据太长Socket error 10041 - Protocol wrong type for socket //协议类型错误Socket error 10042 - Bad protocol option // 错误的协议选项Socket error 10043 - Protocol not supported //协议不被支持Socket error 10044 - Socket type not supported //socket类型不支持Socket error 10045 - Operation not supported //不支持该操作Socket error 10046 - Protocol family not supported //协议族不支持Socket error 10047 - Address family not supported by protocol family//使用的地址族不在支持之列Socket error 10048 - Address already in use //地址已经被使用Socket error 10049 - Cannot assign requested address //地址设置失败Socket error 10050 - Network is down //网络关闭Socket error 10051 - Network is unreachable //网络不可达Socket error 10052 - Network dropped connection on reset //网络被重置Socket error 10053 - Software caused connection abort //软件导致连接退出Socket error 10054 - connection reset by peer //连接被重置Socket error 10055 - No buffer space available //缓冲区不足Socket error 10056 - Socket is already connected // socket已经连接Socket error 10057 - Socket is not connected //socket没有连接Socket error 10058 - Cannot send after socket shutdown //socket已经关闭Socket error 10060 - Connection timed out //超时Socket error 10061 - Connection refused //连接被拒绝Socket error 10064 - Host is down //主机已关闭Socket error 10065 - No route to host // 没有可达的路由Socket error 10067 - Too many processes //进程太多Socket error 10091 - Network subsystem is unavailable //网络子系统不可用Socket error 10092 - WINSOCK.DLL version out of range//winsock.dll版本超出范围Socket error 10093 - Successful WSAStartup not yet performed //没有成功执行WSAStartupSocket error 10094 - Graceful shutdown in progress //Socket error 11001 - Host not found //主机没有找到Socket error 11002 - Non-authoritative host not found // 非授权的主机没有找到Socket error 11003 - This is a non-recoverable error //这是个无法恢复的错误Socket error 11004 - Valid name, no data record of requested type //请求的类型的名字或数据错误WSAEADDRINUSE (10048) Address already in useWSAECONNABORTED (10053) Software caused connection abortWSAECONNREFUSED (10061) Connection refusedWSAECONNRESET (10054) Connection reset by peerWSAEDESTADDRREQ (10039) Destination address required WSAEHOSTUNREACH (10065) No route to hostWSAEMFILE (10024) Too many open filesWSAENETDOWN (10050) Network is downWSAENETRESET (10052) Network dropped connectionWSAENOBUFS (10055) No buffer space availableWSAENETUNREACH (10051) Network is unreachableWSAETIMEDOUT (10060) Connection timed outWSAHOST_NOT_FOUND (11001) Host not foundWSASYSNOTREADY (10091) Network sub-system is unavailableWSANOTINITIALISED (10093) WSAStartup() not performed WSANO_DATA (11004) Valid name, no data of that typeWSANO_RECOVERY (11003) Non-recoverable query error WSATRY_AGAIN (11002) Non-authoritative host foundWSAVERNOTSUPPORTED (10092) Wrong WinSock DLL version。

socket errorno 枚举定义

socket errorno 枚举定义

一、概述在计算机编程中,socket编程是一种常见的网络通信方式,通过socket可以实现不同主机之间的网络通信。

在使用socket编程时,经常会遇到各种错误,而这些错误通常会用errno枚举来表示。

errno 枚举定义了各种可能出现的错误类型,程序员可以根据errno的值来判断程序运行时出现的具体错误,从而进行相应的处理。

二、errno枚举errno枚举定义了许多可能出现的错误类型,下面我将按照错误类型进行分类介绍。

1. 常见错误类型在socket编程中,常见的错误类型包括但不限于以下几种:- EACCES:权限不足,通常指的是对某些系统资源的权限不够。

- EADDRINUSE:位置区域已被使用,通常指的是在绑定socket位置区域时,该位置区域已被其他进程占用。

- EAG本人N:资源暂时不可用,通常指的是资源暂时不可用,需要稍后重试。

- ECONNREFUSED:连接被拒绝,通常指的是远程主机拒绝连接请求。

- EFAULT:位置区域错误,通常指的是指针参数指向的位置区域无效。

- EINTR:中断系统调用,通常指的是系统调用被信号中断。

- EINVAL:无效参数,通常指的是传递给系统调用的参数无效。

- EIO:I/O错误,通常指的是发生了I/O错误。

- EISCONN:已连接,通常指的是socket已经连接。

2. 其他错误类型除了上述常见的错误类型外,errno枚举还定义了许多其他的错误类型,程序员在使用socket编程时可以根据实际情况进行具体的处理。

三、errno值每个错误类型在errno枚举中都有对应的数值,程序员可以通过这些数值来判断程序运行时出现的具体错误。

下面我将列举一些常见的errno值:1. EACCES的值为132. EADDRINUSE的值为483. EAG本人N的值为114. ECONNREFUSED的值为1115. EFAULT的值为146. EINTR的值为47. EINVAL的值为228. EIO的值为59. EISCONN的值为106四、处理错误在程序编写过程中,我们需要针对不同的错误类型进行相应的处理,以保证程序的健壮性和稳定性。

socket常见错误代码解析

socket常见错误代码解析

socket常见错误代码解析Socket error 0 - Directly send errorSocket error 10004 - Interrupted function callSocket error 10013 - Permission deniedSocket error 10014 - Bad addressSocket error 10022 - Invalid argumentSocket error 10024 - Too many open filesSocket error 10035 - Resource temporarily unavailableSocket error 10036 - Operation now in progressSocket error 10037 - Operation already in progressSocket error 10038 - Socket operation on non-socketSocket error 10039 - Destination address requiredSocket error 10040 - Message too longSocket error 10041 - Protocol wrong type for socketSocket error 10042 - Bad protocol optionSocket error 10043 - Protocol not supportedSocket error 10044 - Socket type not supportedSocket error 10045 - Operation not supportedSocket error 10046 - Protocol family not supportedSocket error 10047 - Address family not supported by protocol family Socket error 10048 - Address already in useSocket error 10049 - Cannot assign requested addressSocket error 10050 - Network is downSocket error 10051 - Network is unreachableSocket error 10052 - Network dropped connection on resetSocket error 10053 - Software caused connection abortSocket error 10054 - Connection reset by peerSocket error 10055 - No buffer space availableSocket error 10056 - Socket is already connectedSocket error 10057 - Socket is not connectedSocket error 10058 - Cannot send after socket shutdownSocket error 10060 - Connection timed outSocket error 10061 - Connection refusedSocket error 10064 - Host is downSocket error 10065 - No route to hostSocket error 10067 - Too many processesSocket error 10091 - Network subsystem is unavailableSocket error 10092 - WINSOCK.DLL version out of rangeSocket error 10093 - Successful WSAStartup not yet performed Socket error 10094 - Graceful shutdown in progressSocket error 11001 - Host not foundSocket error 11002 - Non-authoritative host not foundSocket error 11003 - This is a non-recoverable errorSocket error 11004 - Valid name, no data record of requested typeWSAEADDRINUSE (10048) Address already in useWSAECONNABORTED (10053) Software caused connection abort WSAECONNREFUSED (10061) Connection refusedWSAECONNRESET (10054) Connection reset by peerWSAEDESTADDRREQ (10039) Destination address requiredWSAEHOSTUNREACH (10065) No route to hostWSAEMFILE (10024) Too many open filesWSAENETDOWN (10050) Network is downWSAENETRESET (10052) Network dropped connectionWSAENOBUFS (10055) No buffer space availableWSAENETUNREACH (10051) Network is unreachableWSAETIMEDOUT (10060) Connection timed outWSAHOST_NOT_FOUND (11001) Host not foundWSASYSNOTREADY (10091) Network sub-system is unavailable WSANOTINITIALISED (10093) WSAStartup() not performedWSANO_DATA (11004) V alid name, no data of that typeWSANO_RECOVERY (11003) Non-recoverable query errorWSA TRY_AGAIN (11002) Non-authoritative host foundWSA VERNOTSUPPORTED (10092) Wrong WinSock DLL version++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++常見SOCKET錯誤返回碼WSAEINTR (10004)被中斷的系統呼叫當以阻攔式進行的WinSock函式被WSACancelBlockingCall()中斷的時候,這個阻攔式函式會得到WSAEINTR這個錯誤訊息。

socket异常分析(精)

socket异常分析(精)

阻塞Socket 和非阻塞Socket一是阻塞函数,一是非阻塞函数。

所谓阻塞函数,是指其完成指定的任务之前不允许程序调用另一个函数,在Windows 下还会阻塞本线程消息的发送。

所谓非阻塞函数,是指操作启动之后,如果可以立即得到结果就返回结果,否则返回表示结果需要等待的错误信息,不等待任务完成函数就返回常见socket 异常.BindException:Addressalready in use:JVM_Bind。

该异常发生在服务器端进行new ServerSocket(port(port 是一个0,65536的整型值)操作时。

异常的原因是以为与port 一样的一个端口已经被启动,并进行监听。

此时用netstat –an命令,可以看到一个Listending 状态的端口。

只需要找一个没有被占用的端口就能解决这个问题。

.ConnectException:Connection refused:connect 。

该异常发生在客户端进行new Socket(ip,port 操作时,该异常发生的原因是或者具有ip 地址的机器不能找到(也就是说从当前机器不存在到指定ip 路由),或者是该ip 存在,但找不到指定的端口进行监听。

出现该问题,首先检查客户端的ip 和port 是否写错了,如果正确则从客户端ping 一下服务器看是否能ping 通,如果能ping 通(服务服务器端把ping 禁掉则需要另外的办法),则看在服务器端的监听指定端口的程序是否启动,这个肯定能解决这个问题。

.SocketException:Socket is closed ,该异常在客户端和服务器均可能发生。

异常的原因是己方主动关闭了连接后(调用了Socket 的close 方法)再对网络连接进行读写操作。

.SocketException:(Connection reset 或者Connect reset bypeer:Socketwrite error )。

socket 读写 超时 详解

socket 读写 超时 详解

socket 读写超时详解摘要:1.概述2.Socket 读写超时的原因3.Socket 读写超时的解决方法4.总结正文:1.概述在网络编程中,Socket 是一种应用层协议,它提供了一个应用程序与网络之间的接口,使得数据能够在网络中进行传输。

在使用Socket 进行网络通信时,可能会遇到读写超时的问题。

本文将详细解释Socket 读写超时的原因,并提供相应的解决方法。

2.Socket 读写超时的原因Socket 读写超时通常是由于以下原因导致的:(1) 网络拥堵:当网络中的数据包数量过多,导致网络拥堵时,数据包的传输速度会降低,从而导致Socket 读写超时。

(2) 服务器负载过高:当服务器的负载过高时,它可能无法及时响应客户端的请求,从而导致Socket 读写超时。

(3) 网络故障:当网络出现故障时,数据包的传输可能会受到影响,从而导致Socket 读写超时。

(4) 程序错误:当程序中存在错误时,可能会导致Socket 读写超时。

3.Socket 读写超时的解决方法针对Socket 读写超时的问题,可以采取以下措施进行解决:(1) 优化网络环境:尽量避免在网络拥堵的时段进行数据传输,或者使用质量更高的网络线路。

(2) 提高服务器性能:通过提高服务器的性能,可以降低服务器的负载,从而提高其响应速度。

(3) 调整Socket 超时设置:通过调整Socket 的超时设置,可以增加读写操作的时间,从而减少超时发生的概率。

在设置超时时间时,需要根据实际情况进行调整,以保证既能减少超时发生的概率,又不会影响程序的性能。

(4) 检查程序代码:通过检查程序代码,可以发现并修复程序中存在的错误,从而避免Socket 读写超时的问题。

4.总结Socket 读写超时是网络编程中常见的问题,它可能会导致程序无法正常运行。

Socket网络编程常见异常

Socket网络编程常见异常

Socket网络编程常见异常概述(1)Socket 类中有很多方法在声明时使用throws 抛出了一些异常,这些异常都是IOException 的子类。

(2)在Socket 类的方法中抛出最多的就是SocketException,其余还有七个异常可供Socket 类的方法抛出。

Java编程语言百科异常概述(1)public class IOException extends Exception这个异常是所有在Socket 类的方法中抛出的异常的父类。

(2)public class SocketException extends IOException这个异常在Socket 类的方法中使用得最频繁。

(3)public class ConnectException extends SocketExceptionConnectException 异常通常发生在由于服务器忙而未响应或是服务器相应的监听端口未打开。

(4)public class BindException extends SocketException这个异常在多个Socket 或ServerSocket 对象绑定在同一个端口,而且未打开SO_REUSEADDR选项时发生。

(5)public class NoRouteToHostException extends SocketException这个异常在遇到防火墙或是路由无法找到主机的情况下发生。

(6)public class UnknownHostException extends IOException这个异常在域名不正确时被抛出。

(7)public class ProtocolException extends IOException这个异常并不经常被抛出。

由于不明的原因,TCP/IP 的数据包被破坏了,这时将抛出ProtocolException 异常。

(8)public class SocketTimeoutException extends InterruptedIOException如果在连接超时和读取数据超时时间过后,服务器仍然未响应,connect 或read 方法抛SocketTimeoutException 异常。

Socket编程协议错误代码解析

Socket编程协议错误代码解析

10004‎—WSAEI‎N TR函数调用中‎断。

该错误表明‎由于对WS‎A Canc‎elBlo‎cking‎C all的‎调用,造成了一次‎调用被强行‎中断。

10009‎—WSAEB‎A DF文件句柄错‎误。

该错误表明‎提供的文件‎句柄无效。

在Micr‎o soft‎W i ndo‎wsCE下‎,socke‎t函数可能‎返回这个错‎误,表明共享串‎口处于“忙”状态。

10013‎—WSAEA‎C CES权限被拒。

尝试对套接‎字进行操作‎,但被禁止。

若试图在s‎e ndto‎或WSAS‎e ndTo‎中使用一个‎广播地址,但是尚未用‎s etso‎ckopt‎和SO_B‎R OADC‎A ST这两‎个选项设置‎广播权限,便会产生这‎类错误。

10014‎—WSAEF‎A ULT地址无效。

传给Win‎sock函‎数的指针地‎址无效。

若指定的缓‎冲区太小,也会产生这‎个错误。

10022‎—WSAEI‎N V AL参数无效。

指定了一个‎无效参数。

例如,假如为WS‎A Ioct‎l调用指定‎了一个无效‎控制代码,便会产生这‎个错误。

另外,它也可能表‎明套接字当‎前的状态有‎错,例如在一个‎目前没有监‎听的套接字‎上调用ac‎cept或‎W SAA c‎cept。

10024‎—WSAEM‎F ILE打开文件过‎多。

提示打开的‎套接字太多‎了。

通常,Micro‎soft提‎供者只受到‎系统内可用‎资源数量的‎限制。

10035‎—WSAEW‎O ULDB‎L OCK资源暂时不‎可用。

对非锁定套‎接字来说,如果请求操‎作不能立即‎执行的话,通常会返回‎这个错误。

比如说,在一个非暂‎停套接字上‎调用con‎nect,就会返回这‎个错误。

因为连接请‎求不能立即‎执行。

10036‎—WSAEI‎N PROG‎R ESS操作正在进‎行中。

当前正在执‎行非锁定操‎作。

一般来说不‎会出现这个‎错误,除非正在开‎发16位W‎i nsoc‎k应用程序‎。

socket通信异常摘要及简介

socket通信异常摘要及简介

socket异常摘要编辑BindException ;试图将套接字绑定到本地地址和端口时发生错误的情况下,抛出此异常。

ConnectException ;试图将套接字连接到远程地址和端口时发生错误的情况下,抛出此异常。

HttpRetryException ;抛出此异常指示 HTTP 请求需要重试,但由于启用了流模式而无法自动重试。

MalformedURLException ;抛出这一异常指示出现了错误的 URL。

NoRouteToHostException ;试图将套接字连接到远程地址和端口时发生错误的情况下,抛出此异常。

PortUnreachableException ;在连接的数据报上已接收到 ICMP Port Unreachable 消息时,抛出该异常。

ProtocolException ;抛出此异常指示在底层协议中存在错误,如 TCP 错误。

SocketException ;抛出此异常指示在底层协议中存在错误,如 TCP 错误。

SocketTimeoutException ;如果在读取或接受套接字时发生超时,则抛出此异常。

UnknownHostException ;指示主机IP 地址无法确定而抛出的异常。

UnknownServiceException ;抛出这一异常指示出现了未知服务异常。

URISyntaxException ;抛出经过检查的指示字符串不能解析为 URI 引用的异常。

一、Socket通信简介Android与服务器的通信方式主要有两种,一是Http通信,一是Socket通信。

两者的最大差异在于,http 连接使用的是“请求—响应方式”,即在请求时建立连接通道,当客户端向服务器发送请求后,服务器端才能向客户端返回数据。

而Socket通信则是在双方建立起连接后就可以直接进行数据的传输,在连接时可实现信息的主动推送,而不需要每次由客户端想服务器发送请求。

那么,什么是socket?Socket又称套接字,在程序内部提供了与外界通信的端口,即端口通信。

Socket异常

Socket异常

在C#中,我们直接用一个Byte数组传递给函数:
uint dummy = 0;
byte[] inOptionValues = new byte[Marshal.SizeOf(dummy) * 3];
BitConverter.GetBytes((uint)1).CopyTo(inOptionValues, 0);//是否启用Keep-Alive
info.Index = id;
Public.s_userList.Add(id, info);
socket.BeginReceive(info.Buffer, 0, info.Buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallBack), info);
对于这种情况,我们很好处理,因为客户端程序异常退出会在服务端引发ConnectionReset的Socket异常(就是WinSock2中的10054异常)。只要在服务端处理这个异常就可以了。
2、网络链路异常。
如:网线拔出、交换机掉电、客户端机器掉电。当出现这些情况的时候服务端不会出现任何异常。这样的话上面的代码就不能处理这种情况了。对于这种情况在MSDN里面是这样处理的,我在这里贴出MSDN的原文:
try
{
Accept(inOptionValues);
}
catch { }
}
}
private static void Accept(byte[] inOptionValues)
{
Socket socket = Public.s_socketHandler.Accept();
byte[] optionInValue,

Socket Error代码解释大全

Socket Error代码解释大全
Socket error 10035 - Resource temporarily unavailable无法立即完成一个非阻止性套接字操作。
Socket error 10036 - Operation now in progress 目前正在执行一个阻止性操作。
Socket error 10037 - Operation already in progress 在一个非阻止性套接字上尝试了一个已经在进行的操作。
Socket error 10043 - Protocol not supported请求的协议还没有在系统中配置,或者没有它存在的迹象。
Socket error 10044 - Socket type not supported 在这个地址家族中不存在对指定的插槽类型的支持。
Socket error 10045 - Operation not supported 参考的对象类型不支持尝试的操作。
Socket error 10041 - Protocol wrong type for socket 在套接字函数调用中指定的一个协议不支持请求的套接字类型的语法。
Socket error 10042 - Bad protocol option在 getsockopt 或 setsockopt 调用中指定的一个未知的、无效的或不受支持的选项或层次。
Socket error 10014 - Bad address系统检测到在一个调用中尝试使用指针参数时的无效指针地址。
Socket error 10022 - Invalid argument提供了一个无效的参数。
Socket error 10024 - Too many open files打开的套接字太多。

socket异常错误码

socket异常错误码

SocketException.ErrorCode 列表及注释,Winsocket Error 列表及注释注释是英文的,大家需要可以用翻译软件直接译,大体意思没问题。

WinSock Error CodesThe following error codes apply to the WinSock ActiveX Controls.Error Code Error Message10004 The operation is canceled.操作被取消10013 The requested address is a broadcast address, but flag is not set.10014 Invalid argument.10022 Socket not bound, invalid address or listen is not invoked prior to accept. 10024 No more file descriptors are available, accept queue is empty.10035 Socket is non-blocking and the specified operation will block.10036 A blocking Winsock operation is in progress.10037 The operation is completed. No blocking operation is in progress.10038 The descriptor is not a socket.10039 Destination address is required.10040 The datagram is too large to fit into the buffer and is truncated.10041 The specified port is the wrong type for this socket.10042 Option unknown, or unsupported.10043 The specified port is not supported.10044 Socket type not supported in this address family.10045 Socket is not a type that supports connection oriented service.10047 Address Family is not supported.10048 Address in use.10049 Address is not available from the local machine.10050 Network subsystem failed.10051 The network cannot be reached from this host at this time.10052 Connection has timed out when SO_KEEPALIVE is set.10053 Connection is aborted due to timeout or other failure.10054 The connection is reset by remote side.连接被远程端重置10055 No buffer space is available.10056 Socket is already connected.10057 Socket is not connected.10058 Socket has been shut down.10060 The attempt to connect timed out.10061 Connection is forcefully rejected.10201 Socket already created for this object.10202 Socket has not been created for this object. 11001 Authoritative answer: Host not found.11002 Non-Authoritative answer: Host not found. 11003 Non-recoverable errors.11004 Valid name, no data record of requested type.。

常见socket错误返回码

常见socket错误返回码

常见socket错误返回码常见SOCKET错误返回码(转)WSAEINTR (10004) 被中断的系统呼叫当以阻拦式进行的WinSock函式被WSACancelBlockingCall()中断的时候,这个阻拦式函式会得到WSAEINTR这个错误讯息。

读者要注意的是,当你的程式有用WSACancelBlockingCall去中断阻拦式函式的时候,你必须为这个阻拦式函式写处理WSAEINTR错误讯息的程式码,否则你的程式可能会出现些无预期的错误。

原则上,所有能以阻拦式进行的函式都可能会发生这个错误。

WSAEBADF (10009) 错误的档案代码柏克莱socket介面中,档案描述子和socket描述子是相通的,开启socket可以想像成开启一个档案。

WSAEBADF在柏克莱socket介面的意义是指错误的socket描述子,这个错误的socket 描述子可能是未经开启的socket或是以关闭的socket。

在WinSock中有个相通的错误代码WSAENOTSOCK,用来指定错误的socket描述子。

详细说明请参考WSAENOTSOCK部分。

WSAEACCES (10013) 无此权限对于柏克莱socket介面函式,这个错误发生的原因通常是开启一个不具有开启权限的档案或socket。

例如在UNIX上,一般的使用者不能开启SOCK_RAW的socket,通常是超级使用者(super user)才有此权限。

如果一般的使用者企图开启SOCK_RAW的socket,将会得到这个错误讯息。

对于WinSock API函式介面,发生此错误的函式有二:send()和sendto()。

当利用send()或sendto()传送资料的时候,将目的位址设成广播位址( broadcast address ),但是并未呼叫setsockopt()设定SO_BROADCAST选项时便会发生WSAEACCES错误。

WSAEFAULT (10014) 错误的记忆体位址系统侦测出使用错误的记忆体位址。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

WSAEINTR (10004)∙翻译:中断函数调用。

∙说明:阻止操作被中断通过调用WSACancelBlockingCall (Wsapiref_704y.asp)。

WSAEACCES (10013)∙翻译:权限被拒绝。

∙说明:尝试访问套接字访问权限被禁止的方式。

例如,用于发送到广播的地址,但广播的权限未设置通过使用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)∙翻译:错误的地址。

∙说明:尝试使用指针参数的调用时,系统检测到一个无效的指针地址。

如果程序传递了无效的指针值,或者如果缓冲区的长度太小,则会发生此错误。

例如,如果一个参数,它是一种SOCKADDR 结构的长度小于sizeof(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)∙翻译: 套接字对非插座进行操作。

∙说明:操作已尝试在不套接字的内容上。

套接字句柄参数未引用有效的套接字,或者选择(Wsapiref_1ab6.asp),fd_set 的成员已无效。

WSAEDESTADDRREQ (10039)∙翻译:所需的目标地址。

∙说明:从套接字操作中忽略了必需的地址。

例如,如果使用的远程地址的ADDR_ANY 调用发送到(Wsapiref_4sqa.asp),将返回此错误。

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 的互联网协议)和通用协议类型(即SOCK_STREAM)。

如果套接字(Wsapiref_2qr6.asp)调用中显式请求一个不正确的协议,或者错误系列中的一个地址用于套接字,例如,发送到(Wsapiref_4sqa.asp)中,将返回此错误。

WSAEADDRINUSE (10048)∙翻译:地址已在使用中。

∙说明:通常情况下,只允许使用一的每个套接字地址(协议/IP 地址/端口) 是。

如果某个程序尝试绑定到一个IP 地址或端口已被使用对于现有的套接字,套接字不正确,请关闭的套接字(Wsapiref_6vzm.asp),会发生此错误或套接字仍然处于关闭过程中。

对于服务器必须将多个套接字绑定到同一端口号的程序,请考虑使用setsockopt (Wsapiref_94aa.asp)(SO_REUSEADDR)。

客户端程序通常不需要在所有调用绑定、连接(Wsapiref_8m7m.asp)自动选择未使用的端口。

绑定调用时使用通配符地址(涉及ADDR_ANY),特定的地址在提交之前,可能会延迟WSAEADDRINUSE 错误。

这可能会出现对更高版本,其中包括连接、侦听、WSAConnect 或WSAJoinLeaf 发生的另一个函数的调用。

WSAEADDRNOTAVAIL (10049)∙翻译: 无法分配请求的地址。

∙说明:请求的地址是无效的上下文中。

此错误通常是因尝试绑定(Wsapiref_6vzm.asp)到无效的本地计算机的地址。

此错误也可能导致从连接(Wsapiref_8m7m.asp),发送到(Wsapiref_4sqa.asp),WSAConnect (Wsapiref_8kc2.asp),WSAJoinLeaf (Wsapiref_7dv6.asp)或WSASendTo (Wsapiref_752q.asp) 时的远程地址或端口无效(例如,地址或端口0)的远程计算机。

WSAENETDOWN (10050)∙翻译:网络出现故障。

∙说明: 套接字操作遇到了死网络。

此错误可能意味着网络系统(即,对运行Windows 套接字DLL 协议堆栈)、网络接口或本地网络本身的严重故障。

WSAENETUNREACH (10051)∙翻译:网络不可访问。

∙说明:到无法访问的网络尝试执行套接字操作。

此错误通常意味着本地软件知道没有到达的远程主机的路由。

WSAENETRESET (10052)∙翻译:网络中断连接重置。

∙说明:连接已由于保持活动,在操作进行过程中检测到故障而中断。

它还可返回由setsockopt (Wsapiref_94aa.asp) 如果尝试已失败连接上设置SO_KEEPALIVE。

WSAECONNABORTED (10053)∙翻译:软件造成连接终止。

∙说明:已建立的连接被停止主机计算机中的软件可能是由于数据传输超时或协议错。

WSAECONNRESET (10054)∙翻译:连接被对等方重置。

∙说明:现有的连接被远程主机强行关闭。

如果远程主机上的对等程序突然停止、重新启动主机时,或在远程主机使用硬关闭,通常会发生此错误。

有关远程套接字上的SO_LINGER 选项的详细信息,请参阅setsockopt (Wsapiref_94aa.asp)。

如果由于保持活动的一个或多个操作正在进行时检测到故障,连接被中断,也可能导致此错误。

正在进行的操作失败,出现WSAENETRESET。

随后的操作失败,出现WSAECONNRESET。

WSAENOBUFS (10055)∙翻译:没有可用的缓冲区空间。

∙说明:由于系统缓冲区空间不足,或由于队列已满,无法执行套接字操作。

WSAEISCONN (10056)∙翻译: 套接字已连接。

∙说明:在已建立连接的套接字上进行了一个连接请求。

如果发送到(Wsapiref_4sqa.asp)上调用SOCK_DGRAM 连接的套接字(有关SOCK_STREAM 套接字,sendto (Wsapiref_4sqa.asp)中的收件人参数将被忽略)虽然其他实现将此视为有效的匹配项某些实现属性也返回此错误。

WSAENOTCONN (10057)∙翻译: 套接字未连接。

∙说明:由于套接字没有连接并且(在使用sendto [Wsapiref_4sqa.asp] 在数据报套接字上发送时,未提供地址),不允许发送或接收数据的请求。

任何其他类型的操作也可能会返回此错误,例如,如果连接已被重置设置SO_KEEPALIVE setsockopt (Wsapiref_94aa.asp)。

WSAESHUTDOWN (10058)∙翻译: 套接字关闭后无法发送。

∙说明:由于套接字有已关闭在该方向与以前的关闭(Wsapiref_60z6.asp)调用不允许发送或接收数据的请求。

当调用关闭时,将请求关闭套接字的部分。

这是一个信号,发送或接收进程(或两者)已经停产。

相关文档
最新文档