Socket通信错误代码
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编程协议错误代码解析
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函数)的进程中时,也会出现这个错误。
Linux网络编程socket错误码分析(精品)
Linux网络编程socket错误分析socket错误码:EINTR:4阻塞的操作被取消阻塞的调用打断。
如设置了发送接收超时,就会遇到这种错误。
只能针对阻塞模式的socket。
读,写阻塞的socket时,-1返回,错误号为INTR。
另外,如果出现EINTR即errno为4,错误描述Interrupted system call,操作也应该继续。
如果recv 的返回值为0,那表明连接已经断开,接收操作也应该结束。
ETIMEOUT:1101、操作超时。
一般设置了发送接收超时,遇到网络繁忙的情况,就会遇到这种错误。
2、服务器做了读数据做了超时限制,读时发生了超时。
3、错误被描述为“connect time out”,即“连接超时”,这种情况一般发生在服务器主机崩溃。
此时客户TCP 将在一定时间内(依具体实现)持续重发数据分节,试图从服务TCP 获得一个ACK 分节。
当最终放弃尝试后(此时服务器未重新启动),内核将会向客户进程返回ETIMEDOUT 错误。
如果某个中间路由器判定该服务器主机已经不可达,则一般会响应“destination unreachable”-“目的地不可达”的ICMP消息,相应的客户进程返回的错误是EHOSTUNREACH 或ENETUNREACH。
当服务器重新启动后,由于TCP 状态丢失,之前所有的连接信息也不存在了,此时对于客户端发来请求将回应RST。
如果客户进程对检测服务器主机是否崩溃很有必要,要求即使客户进程不主动发送数据也能检测出来,那么需要使用其它技术,如配置SO_KEEPALIVE Socket 选项,或实现某些心跳函数。
EAGAIN:1、Send返回值小于要发送的数据数目,会返回EAGAIN和EINTR。
2、recv 返回值小于请求的长度时说明缓冲区已经没有可读数据,但再读不一定会触发EAGAIN,有可能返回0表示TCP连接已被关闭。
3、当socket是非阻塞时,如返回此错误,表示写缓冲队列已满,可以做延时后再重试.4、在Linux进行非阻塞的socket接收数据时经常出现Resource temporarily unavailable,errno 代码为11(EAGAIN),表明在非阻塞模式下调用了阻塞操作,在该操作没有完成就返回这个错误,这个错误不会破坏socket的同步,不用管它,下次循环接着recv就可以。
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 error 0 - Directly send errorSocket error 10004 - Interrupted function call⼀个封锁操作被对 WSACancelBlockingCall 的调⽤中断。
Socket error 10013 - Permission denied以⼀种访问权限不允许的⽅式做了⼀个访问套接字的尝试。
Socket error 10014 - Bad address系统检测到在⼀个调⽤中尝试使⽤指针参数时的⽆效指针地址。
Socket error 10022 - Invalid argument提供了⼀个⽆效的参数。
Socket error 10024 - Too many open files打开的套接字太多。
Socket 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 error 10039 - Destination address required 请求的地址在⼀个套接字中从操作中忽略。
Socket error 10040 - Message too long ⼀个在数据报套接字上发送的消息⼤于内部消息缓冲区或其他⼀些⽹络限制,或该⽤户⽤于接收数据报的缓冲区⽐数据报⼩。
Socket error 10041 - Protocol wrong type for socket 在套接字函数调⽤中指定的⼀个协议不⽀持请求的套接字类型的语法。
SOCKET错误代码表
WSAEWOULDBLOCK (10035) 函式作用阻攔中
WSAETIMEDOUT (10060) Connection timed out
WSAHOST_NOT_FOUND (11001) Host not found
WSASYSNOTREADY (10091) Network sub-system is unavailable
WSANOTINITIALISED (10093) WSAStartup() not performed
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 10037 - Operation already in progress
Socket error 10038 - Socket operation on non-socket
Socket error 10039 - Destination address required
getstockname()
沒有呼叫bind()函式指定socket名稱
listen()
已經處於連接狀態或是socket沒有呼叫bind()函式指定socket名稱
recv()和recvfrom()
對於datagram socket,socket沒有呼叫bind()函式指定IP位址、port和協定等;對於stream socket,連接尚未建立
Socket通信错误代码
Socket通信错误代码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 时也要捕获异常tryClientSocket.Open;exceptMessageBox(MainForm.Handle,'Error connecting to this address','Connect',MB_ICONEXCLAMATION);end;在 OnError 中最后要将 ErrorCode 置为 0if ErrorEvent=eeConnect thenbeginSocket.Close;MessageBox(MainForm.Handle,'Error connecting to this address','Connect',MB_ICONEXCLAMATION);endelse if ErrorEvent=eeSend thenSocket.Close;ErrorCode:=0;你可能无做第一步而这样也可以区分你所说的两种情况1.第二步OnError 就是此地址上无任何主机存在,到超时就触发OnError 事件2.第一步捕捉到异常就是有主机但被扫描的特定端口不存在。
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。
Windows Sockets 错误码及出错原因
EMSGSIZE
10040
同BSD
WSAEPROTOTYPE
EPROTOTYPE
10041
同BSD
WSAENOPROTOOPT
ENOPROTOOPT
10042
同BSD
WSAEPROTONOSUPPORT
EPROTONOSUPPORT
10043
同BSD
WSAESOCKTNOSUPPORT
NO_RECOVERY
11003
同BSD
WSANO_DATA
NO_DATA
11004
同BSD
A.2Windows Sockets错误码扩展描述
下面给出WSAGetLastError()函数返回的可能错误码按字母顺序排列的列表,同时给出简要的扩展描述。
WSAEACCES (10013) Permission denied.
WSAEDESTADDRREQ (10039) Destination address required.
在套接字上一个操作所必须的地址被遗漏。例如,如果sendto()函数被调用且远程地址为ADDR_ANY时,此错误被返回。
WSAEFAULT (10014) Bad address.
系统检测到调用试图使用的一个指针参数指向的是一个非法指针地址。如果应用程序传递一个非法的指针值,或缓冲区长度太小,此错误发生。例如,参数为结构sockaddr,但参数的长度小于sizeof(struct sockaddr)。
试图和一个不可达主机进行套接字操作。参见WSAENETUNREACH。
WSAEINPROGRESS (10036) Operation now in progress.
socketerror错误类型列表
socketerror错误类型列表SOCKET_E2BIG 参数列表太长SOCKET_EACCES 没有许可权限SOCKET_EADDRINUSE 地址已经被使⽤SOCKET_EADDRNOTAVAIL 不能解析请求的地址SOCKET_EADV ⼴播(⼴告)错误SOCKET_EAFNOSUPPORT Address family不⽀持的协议SOCKET_EAGAIN 资源暂时不能获得SOCKET_EALREADY 操作已经在执⾏SOCKET_EBADE ⽆效的交换SOCKET_EBADF 错误的⽂件描述符SOCKET_EBADFD ⽂件描述符错误的状态SOCKET_EBADMSG 错误的消息SOCKET_EBADR ⽆效的请求描述SOCKET_EBADRQC ⽆效的请求代码SOCKET_EBADSLT ⽆效的操作位置SOCKET_EBUSY 驱动或资源繁忙SOCKET_ECHRNG 信道号码超出范围SOCKET_ECOMM 发送通讯错误SOCKET_ECONNABORTED 软件原因导致通⾏中断SOCKET_ECONNREFUSED 连接被拒绝SOCKET_ECONNRESET 连接被相同的socket重置SOCKET_EDESTADDRREQ 必须需要⽬标地址SOCKET_EDQUOT 超出磁盘配额SOCKET_EEXIST ⽂件已存在SOCKET_EFAULT 错误的地址SOCKET_EHOSTDOWN 主机已关闭SOCKET_EHOSTUNREACH 没有路由到主机SOCKET_EIDRM 表⽰ID被删除SOCKET_EINPROGRESS 操作正在执⾏SOCKET_EINTR 系统调⽤被阻⽌SOCKET_EINVAL ⽆效的参数SOCKET_EIO 输⼊/ 输出错误SOCKET_EISCONN 传输终端已经连接SOCKET_EISDIR 是⼀个⽬录SOCKET_EISNAM 是⼀个指定的类型⽂件SOCKET_EL2HLT 级别2已中⽌SOCKET_EL2NSYNC 级别2不同步SOCKET_EL3HLT 级别3已中⽌SOCKET_EL3RST 级别3被重置SOCKET_ELNRNG 连接号超出范围SOCKET_ELOOP 太多级别的符号连接SOCKET_EMEDIUMTYPE 错误的媒介类型(中间类型)SOCKET_EMFILE 太多打开的⽂件SOCKET_EMLINK 太多的连接SOCKET_EMSGSIZE 消息太长SOCKET_EMULTIHOP 尝试次数太多SOCKET_ENAMETOOLONG ⽂件名太长SOCKET_ENETDOWN ⽹络已关闭SOCKET_ENETRESET ⽹络中断,连接被重置SOCKET_ENETUNREACH ⽹络不可达SOCKET_ENFILE 系统中太多打开的⽂件SOCKET_ENOANO 没有正极SOCKET_ENOBUFS 没有可⽤的缓存空间SOCKET_ENOCSI 没有可⽤的CSI结构SOCKET_ENODATA 没有可⽤的数据SOCKET_ENODEV 没有这样的驱动SOCKET_ENOENT 没有这样的⽂件或⽬录SOCKET_ENOLCK 没有可⽤的记录锁SOCKET_ENOLINK 已经有的服务的连接SOCKET_ENOMEDIUM 没有媒介被找到SOCKET_ENOMEM 不能分配内存SOCKET_ENOMSG 没有指定的消息类型SOCKET_ENONET 设备不在⽹络上SOCKET_ENOPROTOOPT 协议不可⽤SOCKET_ENOSPC 没有空间在驱动器SOCKET_ENOSR 超出的流资源SOCKET_ENOSTR 驱动不是⼀个流SOCKET_ENOSYS 函数没有执⾏SOCKET_ENOTBLK 块驱动是必须的SOCKET_ENOTCONN 传输终端没有连接SOCKET_ENOTDIR 没有⼀个⽬录SOCKET_ENOTEMPTY ⽬录为空SOCKET_ENOTSOCK Socket操作在⼀个⾮socket上SOCKET_ENOTTY 不相符的IO控制器SOCKET_ENOTUNIQ 在⽹络上名字不是唯⼀的SOCKET_ENXIO 没有这样的驱动或地址SOCKET_EOPNOTSUPP 操作不⽀持SOCKET_EPERM 操作不允许SOCKET_EPFNOSUPPORT Protocol family不⽀持SOCKET_EPIPE 失败的管道SOCKET_EPROTO 协议错误SOCKET_EPROTONOSUPPORT 协议不⽀持SOCKET_EPROTOTYPE Socket上协议错误的类型SOCKET_EREMCHG 远程地址已改变SOCKET_EREMOTE 对象是远程的SOCKET_EREMOTEIO 远程I/O错误SOCKET_ERESTART 中断的系统调⽤将要重新开始SOCKET_EROFS ⽂件系统为只读SOCKET_ESHUTDOWN. 传输端点中断不能发送SOCKET_ESOCKTNOSUPPORT Socket类型不⽀持SOCKET_ESPIPE 不合法的检索SOCKET_ESTRPIPE 流管道错误SOCKET_ETIME 定时器到时SOCKET_ETIMEDOUT 连接超时SOCKET_ETOOMANYREFS 太多连接⽆法结合SOCKET_EUNATCH ⽆法附加协议驱动SOCKET_EUSERS 太多⽤户SOCKET_EWOULDBLOCK 资源暂时⽆法获得SOCKET_EXDEV ⽆效的交叉驱动连接SOCKET_EXFULL 交换已满。
Socket编程协议错误代码解析
10004—WSAEIN TR函数调用中断。
该错误表明由于对WSA CancelBlockingC all的调用,造成了一次调用被强行中断。
10009—WSAEBA DF文件句柄错误。
该错误表明提供的文件句柄无效。
在Micro softW i ndowsCE下,socket函数可能返回这个错误,表明共享串口处于“忙”状态。
10013—WSAEAC CES权限被拒。
尝试对套接字进行操作,但被禁止。
若试图在se ndto或WSASe ndTo中使用一个广播地址,但是尚未用s etsockopt和SO_BR OADCA ST这两个选项设置广播权限,便会产生这类错误。
10014—WSAEFA ULT地址无效。
传给Winsock函数的指针地址无效。
若指定的缓冲区太小,也会产生这个错误。
10022—WSAEIN V AL参数无效。
指定了一个无效参数。
例如,假如为WSA Ioctl调用指定了一个无效控制代码,便会产生这个错误。
另外,它也可能表明套接字当前的状态有错,例如在一个目前没有监听的套接字上调用accept或W SAA ccept。
10024—WSAEMF ILE打开文件过多。
提示打开的套接字太多了。
通常,Microsoft提供者只受到系统内可用资源数量的限制。
10035—WSAEWO ULDBL OCK资源暂时不可用。
对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误。
比如说,在一个非暂停套接字上调用connect,就会返回这个错误。
因为连接请求不能立即执行。
10036—WSAEIN PROGR ESS操作正在进行中。
当前正在执行非锁定操作。
一般来说不会出现这个错误,除非正在开发16位Wi nsock应用程序。
常见socket错误返回码
常见SOCK ET错误返回码(转)WSAEIN TR (10004)被中断的系统呼叫当以阻拦式进行的Win Sock函式被WSA Cance lBloc kingC all()中断的时候,这个阻拦式函式会得到W SAEIN TR这个错误讯息。
读者要注意的是,当你的程式有用WSAC ancel Block ingCa ll去中断阻拦式函式的时候,你必须为这个阻拦式函式写处理WS AEINT R错误讯息的程式码,否则你的程式可能会出现些无预期的错误。
原则上,所有能以阻拦式进行的函式都可能会发生这个错误。
WSAEBA DF (10009)错误的档案代码柏克莱soc ket介面中,档案描述子和socke t描述子是相通的,开启sock et可以想像成开启一个档案。
WSAEBA DF在柏克莱sock et介面的意义是指错误的soc ket描述子,这个错误的s ocket描述子可能是未经开启的sock et或是以关闭的so cket。
在WinSo ck中有个相通的错误代码WSA ENOTS OCK,用来指定错误的sock et描述子。
详细说明请参考WSAE NOTSO CK部分。
WSAEAC CES (10013)无此权限对于柏克莱s ocket介面函式,这个错误发生的原因通常是开启一个不具有开启权限的档案或sock et。
例如在UNI X上,一般的使用者不能开启S OCK_R AW的so cket,通常是超级使用者(superuser)才有此权限。
如果一般的使用者企图开启SOCK_RAW的socke t,将会得到这个错误讯息。
对于WinS ock API函式介面,发生此错误的函式有二:send()和sendt o()。
Socket错误码大全
Socket错误码大全errno.00 is: Error 0errno.01 is: Not ownererrno.02 is: No such file or directoryerrno.03 is: No such processerrno.04 is: Interrupted system callerrno.05 is: I/O errorerrno.06 is: No such device or addresserrno.07 is: Arg list too longerrno.08 is: Exec format errorerrno.09 is: Bad file numbererrno.10 is: No child processeserrno.11 is: Resource temporarily unavailableerrno.12 is: Not enough spaceerrno.13 is: Permission deniederrno.14 is: Bad addresserrno.15 is: Block device requirederrno.16 is: Device busyerrno.17 is: File existserrno.18 is: Cross-device linkerrno.19 is: No such deviceerrno.20 is: Not a directoryerrno.21 is: Is a directoryerrno.22 is: Invalid argumenterrno.23 is: File table overflowerrno.24 is: Too many open fileserrno.25 is: Not a typewritererrno.26 is: Text file busyerrno.27 is: File too largeerrno.28 is: No space left on deviceerrno.29 is: Illegal seekerrno.30 is: Read-only file systemerrno.31 is: Too many linkserrno.32 is: Broken pipeerrno.33 is: Argument out of domainerrno.34 is: Result too largeerrno.35 is: No message of desired typeerrno.36 is: Identifier removederrno.37 is: Channel number out of rangeerrno.38 is: Level 2 not synchronizederrno.39 is: Level 3 haltederrno.40 is: Level 3 reseterrno.41 is: Link number out of rangeerrno.42 is: Protocol driver not attachederrno.43 is: No CSI structure availableerrno.44 is: Level 2 haltederrno.45 is: Deadlock condition if locked errno.46 is: Device not readyerrno.47 is: Write-protected mediaerrno.48 is: Unformatted or incompatible media errno.49 is: No locks availableerrno.50 is: Cannot Establish Connection errno.51 is: Connection Downerrno.52 is: Missing file or filesystemerrno.53 is: Requests blocked by Administrator errno.54 is: Operation would blockerrno.55 is: Operation now in progresserrno.56 is: Operation already in progress errno.57 is: Socket operation on non-socket errno.58 is: Destination address required errno.59 is: Message too longerrno.60 is: Protocol wrong type for socket errno.61 is: Protocol not availableerrno.62 is: Protocol not supportederrno.63 is: Socket type not supportederrno.64 is: Operation not supported on socket errno.65 is: Protocol family not supported errno.66 is: Addr family not supported by protocol errno.67 is: Address already in useerrno.68 is: Can't assign requested address errno.69 is: Network is downerrno.70 is: Network is unreachableerrno.71 is: Network dropped connection on reset errno.72 is: Software caused connection abort errno.73 is: Connection reset by peererrno.74 is: No buffer space availableerrno.75 is: Socket is already connectederrno.76 is: Socket is not connectederrno.77 is: Can't send after socket shutdown errno.78 is: Connection timed outerrno.79 is: Connection refusederrno.80 is: Host is downerrno.81 is: No route to hosterrno.82 is: Restart the system callerrno.83 is: Too many processeserrno.84 is: Too many userserrno.85 is: Too many levels of symbolic links errno.86 is: File name too longerrno.87 is: Directory not emptyerrno.88 is: Disk quota exceedederrno.89 is: Invalid file system control data detected errno.90 is: For future useerrno.91 is: For future useerrno.92 is: For future useerrno.93 is: Item is not local to hosterrno.94 is: For future useerrno.95 is: For future useerrno.96 is: For future useerrno.97 is: For future useerrno.98 is: For future useerrno.99 is: For future useerrno.100 is: For future useerrno.101 is: For future useerrno.102 is: For future useerrno.103 is: For future useerrno.104 is: For future useerrno.105 is: For future useerrno.106 is: For future useerrno.107 is: For future useerrno.108 is: For future useerrno.109 is: Function not implementederrno.110 is: Media surface errorerrno.111 is: I/O completed, but needs relocation errno.112 is: No attribute founderrno.113 is: Security Authentication Denied errno.114 is: Not a Trusted Programerrno.115 is: Too many references: can't splice errno.116 is: Invalid wide charactererrno.117 is: Asynchronous I/O cancellederrno.118 is: Out of STREAMS resourceserrno.119 is: System call timed outerrno.120 is: Next message has wrong typeerrno.121 is: Error in protocolerrno.122 is: No message on stream head read q errno.123 is: fd not associated with a stream errno.124 is: Unsupported attribute valueerrno.125 is: Multihop is not allowederrno.126 is: The server link has been severed errno.127 is: Value too large to be stored in data type打印fangshiintnPrintErrno()/*打印socket错误*/ {inti = 0;for(i = 0; i< 256; i++)printf("errno.%02d is: %s\n", i, strerror(i));return 0;}。
socket的一个错误的解释SocketException以及其他几个常见异常
socket的⼀个错误的解释SocketException以及其他⼏个常见异常写socket程序有可能会遇见这个问题其他信息: 由于套接字没有连接并且(当使⽤⼀个 sendto 调⽤发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
这种情况我的错误原因:使⽤了监听的socket执⾏了接受数据的任务代码:public void SetSocket(){Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);socket.Bind(new IPEndPoint(IPAddress.Parse(this.txtIp.Text), int.Parse(this.txtPoint.Text)));socket.Listen(10);ThreadPool.QueueUserWorkItem(new WaitCallback(SendInfoOfService), socket);}//接收连接请求,使⽤线程调⽤接受客户短信息的⽅法public void SendInfoOfService(object socket){var proxSocket = (Socket)socket;while (true){var serverSocket = proxSocket.Accept();clientSocket.Add(serverSocket);ThreadPool.QueueUserWorkItem(new WaitCallback(ReciveInfo), serverSocket);}}之前是在线程池⾥⾯的队列⾥传递了⼀个监听的socket作为参数,到了接收信息的⽅法⾥⾯我没有再重新创建⼀个接收数据的线程,所以就引发了这个错,现在加⼊了var serverSocket = proxSocket.Accept();这个并且把这个监听线程作为参数传递下去到这个⽅法⾥://接受客户短信息public void ReciveInfo(object socket){var proxSocket = (Socket)socket;byte[] data = new byte[1024 * 1024];while (true){int i = proxSocket.Receive(data, 0, data.Length, SocketFlags.None);if (i <= 0){proxSocket.Shutdown(SocketShutdown.Both);proxSocket.Close();clientSocket.Remove(proxSocket);return;}string str = Encoding.Default.GetString(data, 0, i);this.txtContent.Text = str;}}问题解决此外,还有⼏个地⽅需要使⽤try catch去处理,防⽌异常,1、防⽌⽤户异常退出,在接收数据的信息⾥⾯如果发送的字节是0则表⽰⽤户退出,为了防⽌推出异常,加⼊如下代码,这个异常的处理应该在客户端和服务器端都写上 int len = 0;try{len = proxSocket.Receive(data, 0, data.Length, SocketFlags.None);}catch (Exception ex){//异常退出AppendTextToTxtLog(string.Format("服务器端:{0}⾮正常退出", proxSocket.RemoteEndPoint.ToString()));StopContnet();//关闭连接return;}if (len <= 0){//客户端正常退出AppendTextToTxtLog(string.Format("服务器端:{0}正常退出", proxSocket.RemoteEndPoint.ToString())); StopContnet();//停⽌连接return;//让⽅法结束,终结当前接受客户端数据的异步线程。
unrecognized windows sockets error
未识别的Windows套接字错误在Windows操作系统中,网络通信是通过套接字(Socket)来实现的。
套接字是一个抽象概念,用于描述应用程序和网络之间的一个端点。
在进行网络通信时,套接字提供了一种标准的接口,以便应用程序能够通过它来发送和接收数据。
然而,在使用Windows套接字编程时,有时会遇到一些套接字错误。
其中之一是“未识别的Windows套接字错误”(unrecognized windows sockets error)。
错误信息及原因当出现“未识别的Windows套接字错误”时,通常会伴随着一个具体的错误代码(error code)。
这个错误代码是一个整数值,用于指示出现错误的具体原因。
不同的错误代码代表了不同的问题,所以我们需要根据错误代码来判断产生错误的原因。
以下是一些常见的错误代码及其可能的原因:•WSANOTINITIALISED(10093):套接字库未初始化。
这可能是因为在尝试使用套接字之前没有正确地初始化套接字库,或者在套接字库已经被关闭后仍然尝试使用套接字。
•WSAENETDOWN(10050):网络下线。
这可能是因为计算机网络连接出现问题,例如网络连接中断或无法访问互联网。
•WSAECONNABORTED(10053):连接中止。
这通常是由于远程主机意外关闭了连接引起的,或者是由于防火墙或网络设备的设置导致连接被中断。
•WSAECONNRESET(10054):连接重置。
这可能是由于远程主机或网络设备强制关闭了连接引起的。
•WSAEAFNOSUPPORT(10047):不支持的地址族。
这可能是由于使用了无效的地址族引起的,例如在IPv4环境下使用IPv6地址。
解决方法针对不同的错误代码,我们可以采取不同的解决方法。
以下是一些常见的解决方法:1.检查套接字库的初始化:如果出现WSANOTINITIALISED错误,我们需要确保在使用套接字之前正确地初始化了套接字库。
Linux中socket错误编码表errno
Linux中socket错误编码表errno最近在网络编程使用的过程中,发现errno会经常使用。
因此决定在此做个留用,以备以后使用。
虽然errno是非线程安全的,但是可以通过几种机制保证其安全。
最近在使用的过程中获得了errno,程序无法执行,也不知道如何解决问题。
因此,理解每一个返回的errno整数值的含义是很重要的。
这个我们可以通过strerror函数来实现。
strerror(返回整数errno对应的错误原因的描述字符串)所需头文件: #include函数声明: char * strerror(int errnum);输入:整数errno输出:返回描述错误原因的字符串指针功能:用来依参数errnum 的错误代码来查询其错误原因的描述字符串,然后将该字符串指针返回。
示例:#include#include#define NUM 150int main(void){int i;for ( i=0; i {printf( "%d:%s\n", i, strerror(i) );}return 0;}运行结果:0:Success1:Operation not permitted2:No such file or directory3:No such process4:Interrupted system call5:Input/output error6:No such device or address7:Argument list too long8:Exec format error9:Bad file descriptor10:No child processes11:Resource temporarily unavailable 12:Cannot allocate memory13:Permission denied14:Bad address15:Block device required16:Device or resource busy17:File exists18:Invalid cross-device link19:No such device20:Not a directory21:Is a directory22:Invalid argument23:Too many open files in system 24:Too many open files25:Inappropriate ioctl for device 26:Text file busy27:File too large28:No space left on device29:Illegal seek30:Read-only file system31:Too many links32:Broken pipe33:Numerical argument out of domain 34:Numerical result out of range 35:Resource deadlock avoided36:File name too long37:No locks available38:Function not implemented39:Directory not empty40:Too many levels of symbolic links 41:Unknown error 4142:No message of desired type43:Identifier removed44:Channel number out of range 45:Level 2 not synchronized46:Level 3 halted47:Level 3 reset48:Link number out of range49:Protocol driver not attached50:No CSI structure available51:Level 2 halted52:Invalid exchange53:Invalid request descriptor54:Exchange full55:No anode56:Invalid request code57:Invalid slot58:Unknown error 5859:Bad font file format60:Device not a stream61:No data available62:Timer expired63:Out of streams resources64:Machine is not on the network65:Package not installed66:Object is remote67:Link has been severed68:Advertise error69:Srmount error70:Communication error on send71:Protocol error72:Multihop attempted73:RFS specific error74:Bad message75:Value too large for defined data type76:Name not unique on network77:File descriptor in bad state78:Remote address changed79:Can not access a needed shared library80:Accessing a corrupted shared library81:.lib section in a.out corrupted82:Attempting to link in too many shared libraries 83:Cannot exec a shared library directly84:Invalid or incomplete multibyte or wide character 85:Interrupted system call should be restarted 86:Streams pipe error87:Too many users88:Socket operation on non-socket89:Destination address required90:Message too long91:Protocol wrong type for socket92:Protocol not available93:Protocol not supported94:Socket type not supported95:Operation not supported96:Protocol family not supported97:Address family not supported by protocol98:Address already in use99:Cannot assign requested address100:Network is down101:Network is unreachable102:Network dropped connection on reset103:Software caused connection abort104:Connection reset by peer105:No buffer space available106:Transport endpoint is already connected 107:Transport endpoint is not connected108:Cannot send after transport endpoint shutdown 109:Too many references: cannot splice110:Connection timed out111:Connection refused112:Host is down113:No route to host114:Operation already in progress115:Operation now in progress116:Stale NFS file handle117:Structure needs cleaning118:Not a XENIX named type file119:No XENIX semaphores available 120:Is a named type file121:Remote I/O error122:Disk quota exceeded123:No medium found124:Wrong medium type125:Operation canceled126:Required key not available 127:Key has expired128:Key has been revoked129:Key was rejected by service 130:Owner died131:State not recoverable132:Unknown error 132133:Unknown error 133134:Unknown error 134135:Unknown error 135136:Unknown error 136137:Unknown error 137138:Unknown error 138139:Unknown error 139140:Unknown error 140141:Unknown error 141142:Unknown error 142143:Unknown error 143144:Unknown error 144145:Unknown error 145146:Unknown error 146147:Unknown error 147148:Unknown error 148149:Unknown error 149通过这个我们终于理解errno的含义了。
SocketError
服务器端口未打开
ConnectionRefused/10061
由于目标计算机积极拒绝,无法连接。
EndConnect
服务器端口未打开
ObjectDisposedException
客户端主动CLOSE时
消息:远程主机强迫关闭了一个现有的连接。
出错地方:.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
环境:当客户端关闭程序时,但客户端主动CLOSE时
消息:远程主机强迫关闭了一个现有的连接。
出错地方:.Sockets.Socket.EndReceive(IAsyncResult asyncResult)
1、UDP
错误类型
发生
地方
错误编码
(SocketErrorCode)
描述
SocketException
服务器
AddressAlreadyInUse
通常每个套接字地址(协议/网络地址/端口)只允许使用一次
2、TCP
错误类型
发生
地方
错误编码
(SocketErrorCode)
描述
环境
SocketException
服务器
AddressAlreadyInUse/10048
通常每个套接字地址(协议/网络地址/端口)只允许使用一次
InvalidArgument/10022
提供了一个无效的参数
.bind()了两次
NotConnected/10057
由于套接字没有连接并且(当使用一个sendto调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
但客户端采用Shutdown(SocketShutdown.Both)时,服务器端EndReceive(iar)=0
最新windowssocket错误码及出错原因
w i n d o w s s o c k e t错误码及出错原因windows socket错误码及出错原因编程 2009-11-01 14:33:21 阅读1890 评论0 字号:大中小订阅本文转自/khler/archive/2007/07/11/1685023.aspxWindows Sockets在头文件winsock.h中定义了所有的错误码,它们包括以“WSA”打头的Windows Sockets实现返回的错误码和Berkeley Sockets定义的错误码全集。
定义Berkeley Sockets错误码是为了确保原有软件的可移植性。
A.1 Windows Sockets错误码列表表A.1列出了WSAGetLastError()函数返回的可能错误码和它们的解释,它们可分为四个部分。
错误码的第一部分是用来解决在不同的C编译中对标准C错误码的不一致的定义。
错误码的第二部分是标准Berkeley Sockets错误码的Windows Sockets版本。
错误码的第三部分包括特定Windows Sockets扩充的错误码。
错误码的第四部分由Windows Sockets的getXbyY()和WSAAsyncGetXByY()函数返回,相当于Berkeley软件中由变量h_errno返回的错误(事实上,Windows Sockets在头文件winsock.h中已将h_error定义成其值为WSAGetLastError()的一个宏),它们相当于由域名服务(Domain Name Service)返回的各种失败。
如果Windows Sockets实现没有使用域名服务,它将使用最合适的代码。
一般地,Windows Sockets应用程序应该将错误WSAHOST_NOT_FOUND和WSANO_DATA解释为指示关键字(名字,地址等)没有找着,而错误WSATRY_AGAIN和WSANO_RECOVERY是提醒名字服务自身是非操作的。
常见socket错误返回码
常见错误返回码(转)() 被中断的系统呼叫当以阻拦式进行的函式被()中断的时候,这个阻拦式函式会得到这个错误讯息。
读者要注意的是,当你的程式有用去中断阻拦式函式的时候,你必须为这个阻拦式函式写处理错误讯息的程式码,否则你的程式可能会出现些无预期的错误。
原则上,所有能以阻拦式进行的函式都可能会发生这个错误。
() 错误的档案代码柏克莱介面中,档案描述子和描述子是相通的,开启可以想像成开启一个档案。
在柏克莱介面的意义是指错误的描述子,这个错误的描述子可能是未经开启的或是以关闭的。
在中有个相通的错误代码,用来指定错误的描述子。
详细说明请参考部分。
() 无此权限对于柏克莱介面函式,这个错误发生的原因通常是开启一个不具有开启权限的档案或。
例如在上,一般的使用者不能开启的,通常是超级使用者( )才有此权限。
如果一般的使用者企图开启的,将会得到这个错误讯息。
对于函式介面,发生此错误的函式有二:()和()。
当利用()或()传送资料的时候,将目的位址设成广播位址( ),但是并未呼叫()设定选项时便会发生错误。
() 错误的记忆体位址系统侦测出使用错误的记忆体位址。
呼叫函式时,常常会有参数是以指标的方式传入,这个指标可能是指向一个结构,如结构,或是指向一个资料缓冲区。
当程式不小心传入一个错误记忆体未指的指标时,就会发生这个错误。
此外,当指标所指向的记忆体区块太小的时候,也会发生这个错误。
() 参数错误如果传入不正确的参数给函式的话,会导致这个错误。
如果参数是一个结构的指标,此结构内容填入不正确的值,也会导致这个错误。
例如,()函式的()参数只能是、或,若是设定成其他数值,就会出现这。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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.
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.
end
else if ErrorEvent=eeSend then
Socket.Close;
ErrorCode:=0;
你可能无做第一步
而这样也可以区分你所说的两种情况
1.第二步 OnError 就是此地址上无任何主机存在 ,到超时就触发 OnError 事件
11003 Non-recoverable errors.
11004 Valid name, no data record of requested type.
在打开 Socket 时也要捕获异常
try
ClientSocket.Open;
except
MessageBox(MainForm.Handle,'Error connecting to this address','Connect',MB_ICONEXCLAMATION);
10057 Socket is not connected.
10058 Socket has been shut down.
10060 The attempt to connect timed out.
10061 Connection is forcefully rejected.
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.
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.
WinSock Error Codes
The following error codes apply to the WinSock ActiveX Controls.
Error Code Error Message
10004 The operation is canceled.
10013 The requested address is a broadcast address, but flag is not set.
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.
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.
10201 Socket already created for this object.
10202 Socket has not been created for thБайду номын сангаасs object.
11001 Authoritative answer: Host not found.
11002 Non-Authoritative answer: Host not found.
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.
end;
在 OnError 中最后要将 ErrorCode 置为 0
if ErrorEvent=eeConnect then
begin
Socket.Close;
MessageBox(MainForm.Handle,'Error connecting to this address','Connect',MB_ICONEXCLAMATION);