LINUX.ORG.RU

История изменений

Исправление Stanson, (текущая версия) :

int optval = 1; // Включить keepalive
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(int));
optval = 5; // количество неотвеченных чтобы считать соединение дохлым
setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &optval, sizeof(int));
optval = 5; // через какое время после пакета с данными посылать первый keep-alive
setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &optval, sizeof(int));
optval = 5; // с каким интервалом посылать последующие keep-alive
setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &optval, sizeof(int));

Keepalive нужен как минимум в паре случаев:

1. Если провайдер урод и отрубает подключение при отсутствии передаваемых данных или просто так, или не умеет в хэндовер (опсосы)

2. Если нужно узнавать, что связи нету ещё до передачи очередного пакета с данными.

Исправление Stanson, :

int optval = 1; // Включить keepalive
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(int));
optval = 5; // количество неотвеченных чтобы считать соединение дохлым
setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &optval, sizeof(int));
optval = 5; // через какое время после пакета с данными посылать первый keep-alive
setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &optval, sizeof(int));
optval = 5; // с каким интервалом посылать последующие keep-alive
setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &optval, sizeof(int));

Keepalive нужен как минимум в паре случаев:

1. Если провайдер урод и отрубает подключение при отсутствии передаваемых данных или просто так, или не умеет в хэндовер (опсосы)

2. Если нужно узнавать, что соединение разорвано ещё до передачи очередного пакета с данными.

Исправление Stanson, :

int optval = 1; // Включить keepalive
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(int));
optval = 5; // количество неотвеченных чтобы считать соединение дохлым
setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &optval, sizeof(int));
optval = 5; // через какое время после пакета с данными посылать первый keep-alive
setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &optval, sizeof(int));
optval = 5; // с каким интервалом посылать последующие keep-alive
setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &optval, sizeof(int));

Keepalive нужен как минимум в паре случаев:

1. Если провайдер урод и отрубает подключение при отсутствии передаваемых данных (опсосы)

2. Если нужно узнавать, что соединение разорвано ещё до передачи очередного пакета с данными.

Исходная версия Stanson, :

int optval = 1; // Включить keepalive
setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &optval, sizeof(int));
optval = 5; // количество неотвеченных чтобы считать соединение дохлым
setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &optval, sizeof(int));
optval = 5; // через какое время после пакета с данными посылать первый keep-alive
setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &optval, sizeof(int));
optval = 5; // с каким интервалом посылать последующие keep-alive
setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &optval, sizeof(int));


Keepalive нужен как минимум в паре случаев: 

1. Если провайдер урод и отрубает подключение при отсутствии передаваемых данных (опсосы)

2. Если нужно узнавать, что соединение разорвано ещё до передачи очередного пакета с данными.