[網絡通訊]socket編程中檢查connect是否成功

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

相關文章
相關標籤/搜索