0

ソケットの TCP キープアライブを構成するための次の機能があります。

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 でこの関数を呼び出した場合、すべての accept() されたクライアントに影響しますか (つまり、accept() されたクライアントはこれらのソケット オプションを継承し、TCP キープアライブ用に設定されますか)? オーバーヘッドを最小限に抑えるために、すべてのクライアントに対してこの関数を呼び出す必要はありません。ありがとう。

4

1 に答える 1

0

これは機能するはずです。本「Unix Network Programming」には次のように書かれています。

ここに画像の説明を入力

于 2017-04-16T21:12:55.327 に答える