socket鏈接返回錯誤碼

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: 進程

待續.... 資源