connect設定連線超時

2022-08-29 01:09:07 字數 883 閱讀 4852

**:庖丁解牛

/*** connect_timeout - 帶超時的connect(方法中已執行connect)

* @fd:檔案描述符

* @addr:位址結構體指標

* @wait_seconds:等待超時秒數,如果為0表示不檢測超時

* 成功返回0.失敗返回-1,超時返回-1並且errno = etimedout

* */

int connect_timeout(int fd, struct sockaddr_in *addr, unsigned intwait_seconds)

ret = connect(fd, (struct sockaddr *) addr, sizeof(structsockaddr));

if (ret == -1 && errno ==einprogress)

while (ret == -1 && errno ==eintr);

//ret==-1 不需要處理,正好給ret賦值

//select()報錯,但是此時不能退出當前connect_timeout()函式

//因為還需要取消檔案描述符的非阻塞

if (ret == 0)

else if (ret == 1)

//說明套接字沒有發生錯誤,成功}}

if (wait_seconds > 0)

returnret;

}ps:有人測試利用getsockopt方式判斷連線建立成功與否在linux環境下不可用,如下方式:

connect(sock_fd, (struct sockaddr *)&addr, sizeof(struct sockaddr_in));

int err = errno;

if  (err == eisconn)

linux 設定connect 超時

將乙個socket 設定成阻塞模式和非阻塞模式,使用fcntl方法,即 設定成非阻塞模式 先用fcntl的f getfl獲取flags,用f setfl設定flags o nonblock 即 flags fcntl sockfd,f getfl,0 獲取檔案的flags值。fcntl sockfd...

9 呼叫connect連線超時

簡單來說,連線超時就是當客戶端呼叫connect函式跟服務端建立連線,等待一段時間後,最後connect函式返回etimedout錯誤,建立連線失敗。那麼連線超時具體是怎麼出現的呢?一般是客戶端呼叫connect傳送的syn報文在網路傳輸過程中發生網路擁塞,導致報文丟失或服務端收到syn,但未及時響...

C socket 關於connect超時設定

使用阻塞的socket,可以設定讀寫超時,struct timeval tv timeout tv timeout.tv sec 60 tv timeout.tv usec 0 if setsockopt sockfd,sol socket,so sndtimeo,void tv timeout,s...