Я пытаюсь настроить конфигурацию keepalive для сокетного соединения с клиентом в Linux и сервером в Windows. Я успешно вижу сообщения активности с SO_KEEPALIVE = 1, TCP_KEEPIDLE=30sec, keepalive_count = 3, keepalive_interval = 20
через каждые 30 секунд. Затем я хочу изменить вышеуказанные параметры, чтобы они принимали другие значения, скажем TCP_KEEPIDLE = 60 sec
, но я продолжаю видеть сообщения активности только в течение 30 секунд. Любая подсказка, если что-нибудь еще, если требуется перенастроить эти параметры в соединении?
int option = 1;
int keepalive_time = 30;
int keepalive_count = 3;
int keepalive_interval = 20;
if(setsockopt(CreateSocket , SOL_SOCKET, SO_KEEPALIVE, (char *)&option, sizeof(option)) == -1)
{
printf("\n setsockopt SO_KEEPALIVE retuened -1 !!!");
// ignore this error
}
if(setsockopt(CreateSocket, IPPROTO_TCP, TCP_KEEPIDLE, &keepalive_time, sizeof(keepalive_time)) == -1)
{
printf("\n error in setsockopt keepalive_time");
}
if(setsockopt(CreateSocket, SOL_TCP, TCP_KEEPCNT, (char*)&keepalive_count, sizeof(keepalive_count)) == -1)
{
printf("\n error in setsockopt keepalive_count");
}
if(setsockopt(CreateSocket, SOL_TCP, TCP_KEEPINTVL, (char*)&keepalive_interval, sizeof (keepalive_interval)) == -1)
{
printf("\n error in setsockopt keepalive_interval");
}
Со второй попытки, изменив keepalive_time на 60 сек.
Есть ли какие-либо подсказки относительно того, что необходимо сделать для обновления значений?