История изменений
Исправление 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. Если нужно узнавать, что соединение разорвано ещё до передачи очередного пакета с данными.