The OpenNET Project / Index page

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

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Программирование сокетов - нужен специалист"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"Программирование сокетов - нужен специалист"  
Сообщение от Dimitry (??) on 18-Дек-05, 13:12 
Всем привет!

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

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

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


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

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

man socket || man epoll.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Программирование сокетов - нужен специалист"  
Сообщение от Andrey (??) on 21-Дек-05, 07:47 
> 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));

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

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "Программирование сокетов - нужен специалист"  
Сообщение от Hordi on 21-Дек-05, 19:18 
Правильно тебе посоветовали об отправке тестовых сообщений, но чтобы не портить протокол, используй внеполосные данные - все работает просто прекрасно.

Трогать SO_KEEPALIVE имхо не поможет...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "Программирование сокетов - нужен специалист"  
Сообщение от Alexx (??) on 29-Дек-05, 08:42 
>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_*  ...


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "Программирование сокетов - нужен специалист"  
Сообщение от Alexx (??) on 29-Дек-05, 08:47 
>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 ?

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

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

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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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