0
我已經配置TCP保持連接的插座有以下功能:SO_KEEPALIVE:設置在服務器套接字上還是基於每個客戶端?
int configure_tcp_keepalive(int fd)
{
int opt_val = 1;
if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &opt_val, sizeof(opt_val)) == -1)
return -1;
int keepcnt = 9; //default value on Linux
if (setsockopt(fd, SOL_TCP, TCP_KEEPCNT, &keepcnt, sizeof(keepcnt)) == -1)
return -1;
int keepidle = 30;
if (setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, &keepidle, sizeof(keepidle)) == -1)
return -1;
int keepintvl = 30;
if (setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, &keepintvl, sizeof(keepintvl)) == -1)
return -1;
}
如果我調用服務器FD這個功能,是否會影響每一個接受()處理客戶端(即接受()倒是客戶端繼承這些套接字選項,並因此配置爲TCP Keepalive)?我寧願不必爲每個客戶調用此函數,以儘量減少開銷。謝謝。
謝謝,我不知道這是否適用於其他SO_KEEPALIVE選項,以及。我想我必須檢查Wireshark。 – Hello
也許吧。這本書很古老,當時可能不存在這些選項。試試看看。 – Barmar
是的。它們也適用。 – Hello