The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Программирование сокетов - нужен специалист, !*! Dimitry, 18-Дек-05, 13:12  [смотреть все]
Всем привет!

Есть система Suse Linux, программируем на с++ сокеты.(на подобие вебсервера)
Проблема заключается в том что когда у клиента отрубается интернет то соединение сервером продолжает существовать 18 минут.(много раз тестировал) Это что-то вроде какого-то таймаута.
Есть ли какие то способы уменьшить это время или вообще убрать? Ведь клиент мёртв, а сервер продолжает выполнять свою работу.

Сколько литературы перерыл, не нашёл ответа..

  • Программирование сокетов - нужен специалист, !*! Ghecko, 13:42 , 18-Дек-05 (1)
    >Всем привет!
    >
    >Есть система Suse Linux, программируем на с++ сокеты.(на подобие вебсервера)
    >Проблема заключается в том что когда у клиента отрубается интернет то соединение
    >сервером продолжает существовать 18 минут.(много раз тестировал) Это что-то вроде какого-то
    >таймаута.
    >Есть ли какие то способы уменьшить это время или вообще убрать? Ведь
    >клиент мёртв, а сервер продолжает выполнять свою работу.
    >
    >Сколько литературы перерыл, не нашёл ответа..

    Насколько я знаю, в Apache например, сервер сам устанавливает таймаут связи  клиентом, и если тот не проявляет признаков жизни через N секунд, закрывает сессию.


    • Программирование сокетов - нужен специалист, !*! Dimitry, 14:06 , 18-Дек-05 (2)
      Там немного иначе.. до того как апаче приймет от клиента данные он ждёт (timeout) а после он ухе отправляет клиенту свою инфу и никакой таймаут там уже не нужен.. послал всю инфу и отрубил!
      А мне нужно так.. инфа посылается клиенту пусть через опред. время.. и если клиент закроет браузер то посылается 0 и я могу определить это а если он отрубит инет то это определяется токо через 18мин..
      Что мне портит всю картину!!

      • Программирование сокетов - нужен специалист, !*! be, 09:27 , 19-Дек-05 (3)
        >Там немного иначе.. до того как апаче приймет от клиента данные он
        >ждёт (timeout) а после он ухе отправляет клиенту свою инфу и
        >никакой таймаут там уже не нужен.. послал всю инфу и отрубил!
        >
        >А мне нужно так.. инфа посылается клиенту пусть через опред. время.. и
        >если клиент закроет браузер то посылается 0 и я могу определить
        >это а если он отрубит инет то это определяется токо через
        >18мин..
        >Что мне портит всю картину!!

        man socket || man epoll.

      • Программирование сокетов - нужен специалист, !*! chip, 18:23 , 19-Дек-05 (4)
        >Там немного иначе.. до того как апаче приймет от клиента данные он
        >ждёт (timeout) а после он ухе отправляет клиенту свою инфу и
        >никакой таймаут там уже не нужен.. послал всю инфу и отрубил!

        Ваша не правда. Парсим самостоятельно доку относительно ключа KeepAlive и сопуствующих. + можно заглянуть в спеку по HTTP1.1

  • Программирование сокетов - нужен специалист, !*! Andrey, 10:52 , 20-Дек-05 (5)
    1. Добавить в свой протокол watchdog.
    2. Выставить опции сокета SO_KEEPALIVE, TCP_KEEP* (man 7 socket tcp).


    • Программирование сокетов - нужен специалист, !*! Dimitry, 21:16 , 20-Дек-05 (6)
      1. Демон для поддержания работоспособности системы(не понял для чего мне это?)
      2. KEEP_ALIVE пробовал конечно, получается теже 18мин плюс ещё проблема.. некоторых клиентов просто отрубает..

      Я думал может кто знает правильное решение этой проблемы, а в доках я уже везде копался...


      • Программирование сокетов - нужен специалист, !*! Andrey, 07:47 , 21-Дек-05 (7)
        > 1. Демон для поддержания работоспособности системы(не понял для чего мне это?)

        Какой демон? Тож собака. :)

        На уровне протокола определяешь сообщение, которое клиент регулярно посылает серверу, сервер ждет это сообщение и, если оно не поступает в течение определенного времени, рвет соединение.

        > 2. KEEP_ALIVE пробовал конечно, получается теже 18мин плюс ещё проблема.. некоторых клиентов просто отрубает..

        Так пробовал?

        setsockopt(sock, SOL_SOCKET, SO_KEEPALIVE, &keep_flag, sizeof(keep_flag));
        setsockopt(sock, SOL_TCP, TCP_KEEPIDLE, &keep_idle, sizeof(keep_idle));
        setsockopt(sock, SOL_TCP, TCP_KEEPINTVL, &keep_intvl, sizeof(keep_intvl));
        setsockopt(sock, SOL_TCP, TCP_KEEPCNT, &keep_cnt, sizeof(keep_cnt));

        Не забудь проверять возвращаемые значения, потому как решение непереносимое.

        > Я думал может кто знает правильное решение этой проблемы, а в доках я уже везде копался...

        Хотелось бы увидеть критерии правильности решения.

      • Программирование сокетов - нужен специалист, !*! Alexx, 08:42 , 29-Дек-05 (9)
        >1. Демон для поддержания работоспособности системы(не понял для чего мне это?)
        >2. KEEP_ALIVE пробовал конечно, получается теже 18мин плюс ещё проблема.. некоторых клиентов
        >просто отрубает..
        >
        >Я думал может кто знает правильное решение этой проблемы, а в доках
        >я уже везде копался...


        Sorry for english ;)


        KEEPALIVE - yes , will help .

        Try also look at /proc/sys/net/ipv4 - you may find a lot of interesting things ;)
        For example , tcp_keepalive_*  ...


      • Программирование сокетов - нужен специалист, !*! rWizard, 14:39 , 04-Янв-06 (11)
        >Я думал может кто знает правильное решение этой проблемы, а в доках
        >я уже везде копался...
        Не знаю, как правильное - а работоющее решение - это "пинговать" удаленную сторону.

  • Программирование сокетов - нужен специалист, !*! nonstop, 16:20 , 18-Июн-08 (12)
    >Всем привет!
    >
    >Есть система Suse Linux, программируем на с++ сокеты.(на подобие вебсервера)
    >Проблема заключается в том что когда у клиента отрубается интернет то соединение
    >сервером продолжает существовать 18 минут.(много раз тестировал) Это что-то вроде какого-то
    >таймаута.
    >Есть ли какие то способы уменьшить это время или вообще убрать? Ведь
    >клиент мёртв, а сервер продолжает выполнять свою работу.
    >
    >Сколько литературы перерыл, не нашёл ответа..

    man tcp
    /proc/sys/net/ipv4/tcp_keepalive_time




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру