Срабатывает ли keepalive ядра автоматически?Или я должен вызвать их из кода? - PullRequest
0 голосов
/ 06 февраля 2019

Ядро предоставляет такие настройки, как "tcp_keepalive_time", "tcp_keepalive_intvl", "tcp_keepalive_probes" ... эти пробники работают автоматически?Или я должен что-то сделать в своем коде, чтобы активировать его?

1 Ответ

0 голосов
/ 06 февраля 2019

Вам необходимо включить эти значения в сокете.Например, в C:

#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/tcp.h>

void set_tcp_keepalive (int fd)
{
    int val;

    val = 1;
    if (setsockopt (fd, SOL_SOCKET, SO_KEEPALIVE, &val, sizeof (val)) == -1) {
        perror ("setsockopt(SO_KEEPALIVE)");
    }

    val = 60;
    if (setsockopt (fd, IPPROTO_TCP, TCP_KEEPIDLE, &val, sizeof (val)) == -1) {
        perror ("setsockopt(TCP_KEEPIDLE)");
    }

    val = 30;
    if (setsockopt (fd, IPPROTO_TCP, TCP_KEEPINTVL, &val, sizeof (val)) == -1) {
        perror ("setsockopt(TCP_KEEPINTVL)");
    }

    val = 2;
    if (setsockopt (fd, IPPROTO_TCP, TCP_KEEPCNT, &val, sizeof (val)) == -1) {
        perror ("setsockopt(TCP_KEEPCNT)");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...