accept與connect的超時設定

2021-09-21 17:34:11 字數 1090 閱讀 1750

connect超時:

我們都知道,connect對應與三次握手中的第一次傳送syn,而對待伺服器的ack,如果伺服器沒有啟動伺服器,有些機器會立刻返回乙個rst表示伺服器拒絕,從而connect失敗,但又些伺服器為了防止攻擊,什麼也不傳送,直至客戶端connect超時,而這一時間又75s,對於客戶端來說是不能接收的。所以需要設定connect的超時時間。

uint32_t ul = 1;

ioctl(sock, fionbio, &ul);//設定成非阻塞

printf("start time: %u\n", time(0));

bool success = false;

if (connect(sock, (sockaddr *)&srv_addr, sizeof srv_addr ) == -1)

else

}ul = 0;

ioctl(sock, fionbio, &ul); //設定成阻塞

accept超時:

一半來說伺服器應該都是在accept狀態,也就無需設定accept超時時間,但一些特殊情況還是需要的。對於accept我們可以使用select多路復用來實現超時設定,但那個**較多。那有沒有別的辦法呢?我們指定,accept對應三次握手中中伺服器接收syn,那麼我們能不能通過設定recv超時來實現accept超時呢?答案是肯定的。

struct timeval timeout = ;

if (setsockopt(proxy_sock, sol_socket, so_rcvtimeo, (char *)&timeout, sizeof(struct timeval)) != 0)

sock = ::accept(proxy_sock, (sockaddr *)null, null);

既然可以用recv超時來設定accept超時,那對於connect能不能通過設定send超時來實現connect超時呢?答案是肯定的!!!

setsockopt(sock, sol_socket, so_sndtimeo, (char *)&timeout, sizeof(struct timeval));

只要將connect和accept對應到三次握手過程中就不難理解這些了。

綜上:

accept與connect的超時設定

connect超時 我們都知道,connect對應與三次握手中的第一次傳送syn,而對待伺服器的ack,如果伺服器沒有啟動伺服器,有些機器會立刻返回乙個rst表示伺服器拒絕,從而connect失敗,但又些伺服器為了防止攻擊,什麼也不傳送,直至客戶端connect超時,而這一時間又75s,對於客戶端來...

accept與connect的超時設定

connect超時 我們都知道,connect對應與三次握手中的第一次傳送syn,而對待伺服器的ack,如果伺服器沒有啟動伺服器,有些機器會立刻返回乙個rst表示伺服器拒絕,從而connect失敗,但又些伺服器為了防止攻擊,什麼也不傳送,直至客戶端connect超時,而這一時間又75s,對於客戶端來...

事件的accept 與ignore 的傳遞

事件是qt中比較難理解的概念,需要花費大量時間鑽研。下面簡單講解 accept 與 ignore 在程式中的傳遞邏輯 1 存在基類 a,其子類 b,層次部件 mainwindow,分別建立類的例項 testa testb mainwindow 2 testb收到 事件c,若選擇 accept 則由t...