Страницы

Наше технологическое.

Вот скажите! Как с этим жить.

Много много лет, для отслеживания разрывов соединений и восстановления связи, я использовал старый, известный способ - подправить параметры KeepAlive непосредственно для гнезда. Это работало много лет. Взялся подпереписать кусок с восстановлением связи.
И что вы думаете? Не работает. Ядро 4.0.5 на сервере. Линуксы и винды клиенты в virtualbox.

#ifdef Q_OS_LINUX
    int ka=1;

    if(setsockopt(mSocket->socketDescriptor(), SOL_SOCKET, SO_KEEPALIVE,
                  &ka, sizeof(ka))<0)
        ConsoleError()<<"Error setsockopt SOL_SOCKET, SO_KEEPALIVE";


    if(setsockopt(mSocket->socketDescriptor(), IPPROTO_TCP, TCP_KEEPIDLE,
                  &KeepAlive, sizeof(KeepAlive))<0)
        ConsoleError()<<"Error setsockopt IPPROTO_TCP, TCP_KEEPIDLE";

    if(setsockopt(mSocket->socketDescriptor(),IPPROTO_TCP, TCP_KEEPCNT,
                  &Count, sizeof(Count))<0)
        ConsoleError()<<"Error setcoskopt IPPROTO_TCP, TCP_KEEPCNT";

    if(setsockopt(mSocket->socketDescriptor(), IPPROTO_TCP, TCP_KEEPINTVL,
                  &Interval, sizeof(Interval))<0)
        ConsoleError()<<"Error setcoskopt IPPROTO_TCP, TCP_KEEPINTVL";

#endif


Вот этот текст прост и понятен. Не работает!
И у меня нет времени на многодневные исследования модуля на разных линуксах и разных ядрах. Просто нет. Естественно, желания менять системные настройки KeepAlive для всей машины у меня нет совершенно. 
А потом выяснится, что они в ядре какую-то штуку новую придумали. 
Но, блин, setsockopt!!! Как же так?!

----->
Походе дело именно в virtualbox. Народ оказывается давно на это жалуется. Правда дело в режиме nat, а я пробую в режиме bridge. Все одно.
Какое малопродуктивное занятие - искать ошибки еще и у других.
Related Posts Plugin for WordPress, Blogger...