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错误代码表

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。
socket错误详解

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)时无数据排队要从套接字读取。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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這個錯誤訊息。
讀者要注意的是,當你的程序有用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)錯誤的內存地址系統偵測出使用錯誤的內存地址。
呼叫WinSock函式時,常常會有參數是以指標的方式傳入,這個指標可能是指向一個結構,如sockaddr_in結構,或是指向一個數據緩衝區。
當程序不小心傳入一個錯誤內存未指的指針時,就會發生WSAEFAULT這個錯誤。
此外,當指針所指向的內存區塊太小的時候,也會發生這個錯誤。
WSAEINV AL (10022)參數錯誤如果傳入不正確的參數給WinSock函式的話,會導致WSAEINV AL這個錯誤。
如果參數是一個結構的指針,此結構內容填入不正確的值,也會導致這個錯誤。
例如,shutdown()函式的how()參數只能是0、1或2,若是設定成其它數值,就會出現這個錯誤。
在網絡程序的設計中,函式和函式之間的呼叫通常有一定的順序,如過不照這個順序進行,也會出現這個錯誤。
底下是針對每個相關函式的詳細說明。
函式錯誤發生的時機accept()呼叫accept()之前沒有成功呼叫listen()bind()已經成功呼叫bind()函式而指定stocket的名稱了getstockname()沒有呼叫bind()函式指定socket名稱listen()已經處於連接狀態或是socket沒有呼叫bind()函式指定socket名稱recv()和recvfrom()對於datagram socket,socket沒有呼叫bind()函式指定IP地址、port和協議等;對於streamsocket,連接尚未建立send()和sendto()對於datagram socket,socket沒有呼叫bind()函式指定IP地址、port和協議等;對於stream socket,連接尚未建立原則上,所有函式其參數所能設定的值有一定的範圍,或是有一些特定的值,這些函式都有可能發生這個錯誤。