Параметры поддержки активности (TCP_KEEPIDLE, TCP_KEEPCNT, TCP_KEEPINTVL) после настройки в сокете сохраняют более ранние значения даже при модификации - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь настроить конфигурацию 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 сек.

Есть ли какие-либо подсказки относительно того, что необходимо сделать для обновления значений?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...