10035—WSAEWOULDBLOCK
资源暂时不可用。对非锁定套接字来讲,若是请求操做不能当即执行的话,一般会返回这个错误。好比说,在一个非暂停套接字上调用 connect,就会返回这个错误。由于链接请求不能当即执行。
10037—WSAEALREADY
操做已完成。通常来讲,在非锁定套接字上尝试已处于进程中的操做时,会产生这个错误。好比,在一个已处于链接进程的非锁定套接字上,再一次调用 connect 或 WSAConnect。另外,服务提供者处于执行回调函数(针对支持回调例程的 Winsock函数)的进程中时,也会出现这个错误。
应用层socket接收数据:
一、内核copy数据到socket接收缓冲区
二、应用程序调用recv,copy socket接收缓冲数据到应用进程。
应用socket发送数据:
一、应用调用send copy数据到socket发送缓冲区,
二、内核维护socket缓冲区经过IP协议发出数据
链接对应关系: 服务器
注: accept 只是从内核取出能够已完成握手(创建链接)的队列中取出一个链接响应,表示应用层完成tcp链接。 socket
10035处理-> tcp
部分解决方案1: 函数
在client链接服务器过程当中,若是处于非阻塞模式下的socket在connect()的过程当中可
以设置connect()延时,直到accpet()被呼叫,本函数设置只有在非阻塞的过程当中有显著的
做用,在阻塞的函数调用中做用不大)BOOL bAccept=TRUE; spa
setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bAccept,sizeof(BOOL)); 队列
部分解决方案2: 进程
待续.... 资源