- Программирование сокетов - нужен специалист, 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)); Не забудь проверять возвращаемые значения, потому как решение непереносимое. > Я думал может кто знает правильное решение этой проблемы, а в доках я уже везде копался... Хотелось бы увидеть критерии правильности решения.
- Программирование сокетов - нужен специалист, Hordi, 19:18 , 21-Дек-05 (8)
Правильно тебе посоветовали об отправке тестовых сообщений, но чтобы не портить протокол, используй внеполосные данные - все работает просто прекрасно.Трогать SO_KEEPALIVE имхо не поможет...
- Программирование сокетов - нужен специалист, 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_* ...
- Программирование сокетов - нужен специалист, Alexx, 08:47 , 29-Дек-05 (10)
>Try also look at /proc/sys/net/ipv4 - you may find a lot of >interesting things ;) > For example , tcp_keepalive_* ... and tcp_retries1, tcp_retries2 ;) have you tried to check connection timers with netstat ?
- Программирование сокетов - нужен специалист, rWizard, 14:39 , 04-Янв-06 (11)
>Я думал может кто знает правильное решение этой проблемы, а в доках >я уже везде копался... Не знаю, как правильное - а работоющее решение - это "пинговать" удаленную сторону.
- Программирование сокетов - нужен специалист, nonstop, 16:20 , 18-Июн-08 (12)
>Всем привет! > >Есть система Suse Linux, программируем на с++ сокеты.(на подобие вебсервера) >Проблема заключается в том что когда у клиента отрубается интернет то соединение >сервером продолжает существовать 18 минут.(много раз тестировал) Это что-то вроде какого-то >таймаута. >Есть ли какие то способы уменьшить это время или вообще убрать? Ведь >клиент мёртв, а сервер продолжает выполнять свою работу. > >Сколько литературы перерыл, не нашёл ответа.. man tcp /proc/sys/net/ipv4/tcp_keepalive_time
|