1、編程中的connect成功斷定編程
一、非阻塞socket在connect時返回EWOULDBLOCK,說明後臺在異步處理中。windows
二、用select檢查socket是否可寫,當select返回,而且FD_ISSET爲真時,可能存在兩種狀況,一種的確是鏈接成功,另一種是已經失敗了,多是被reset或timeout,此時須要判斷是否下真的成功。能夠用的辦法有:異步
I、再次調用connect。(windows下在一個成功鏈接的socket上再次connect會返回-1,WSAGetLastError()爲WSAEISCONN,在Linux下會返回0)socket
II、對socket調用read,讀取長度爲0的數據,應返回0,表示成功。get
III、getpeername獲取對端socket地址,若是返回ENOTCONN,表示失敗。ast
IV、用SO_SOCKET調用getsockopt獲得socket上的待處理錯誤,不爲0表示失敗。後臺
三、windows下connect失敗由except set中提示,只檢查可寫,所以select會一直等到select中設定的時間到達,雖然實際是已經收到了RESET。因此在windows能夠考慮用WSAPoll。select