socket连接返回错误码

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

10035—WSAEWOULDBLOCK  
      资源暂时不可用。对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误。比如说,在一个非暂停套接字上调用 connect,就会返回这个错误。因为连接请求不能立即执行。  

      10037—WSAEALREADY  
操作已完成。一般来说,在非锁定套接字上尝试已处于进程中的操作时,会产生这个错误。比如,在一个已处于连接进程的非锁定套接字上,再一次调用 connect 或 WSAConnect。另外,服务提供者处于执行回调函数(针对支持回调例程的 Winsock函数)的进程中时,也会出现这个错误。  
 
应用层socket接收数据:
     1、内核copy数据到socket接收缓冲区
     2、应用程序调用recv,copy socket接收缓冲数据到应用进程。
 
应用socket发送数据:
    1、应用调用send copy数据到socket发送缓冲区,
    2、内核维护socket缓冲区通过IP协议发出数据

 

连接对应关系:

socket连接返回错误码_第1张图片

注: accept 只是从内核取出可以已完成握手(建立连接)的队列中取出一个连接响应,表示应用层完成tcp连接。

10035处理->

部分解决方案1:

在client连接服务器过程中,如果处于非阻塞模式下的socket在connect()的过程中可
以设置connect()延时,直到accpet()被呼叫,本函数设置只有在非阻塞的过程中有显著的
作用,在阻塞的函数调用中作用不大)BOOL bAccept=TRUE;

setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bAccept,sizeof(BOOL));

部分解决方案2:

待续....


 

转载于:https://my.oschina.net/u/727148/blog/481418

你可能感兴趣的:(socket连接返回错误码)