|
|
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
RH7.3 Написал я свой socket-sertver и socket-client На Windows работают сколь угодно долго На RH7.3, из тех же исходников, отваливаются через 5мин с сообщением на сервере ReadTimeout, на клиенте Socket error 10053 - т.е. сервер оборвал соединение и всё тут. На форуме нашёл похожую проблему , но там солярка и рекомендуют смотреть /etc/inetd.conf В своём /etc/inetd.conf нашёл из timeout`ов только protocol:timeout = 120 Ничего похожего на 4 мин, 5 мин, 240 сек или 300 сек. Где ещё может находиться подобное ограничение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 09:47:56 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Oerr/usr/include/linux/socket.h and types.h? Там кроме #define констант больше нет ничего. Ни одна не похожа на Timeout или ReadTimeout. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 10:34:46 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Помню тот вопрос. Но у Вас совсем другое - там у демона был предусмотрен таймаут и он запускался через inetd, а у Вас очевидно нет, так что на ту ветку можно забить. Скорее всего действительно софт как-то неправильно написан. Но еще весьма возможно тут с keep-alive проблемы и стоит глянуть на /proc/sys/net/ipv4/tcp_keepalive_time /proc/sys/net/ipv4/tcp_keepalive_probes /proc/sys/net/ipv4/tcp_keepalive_intvl попробовать echo 0 > /proc/sys/net/ipv4/tcp_keepalive_probes не факт что поможет, но попробовать можно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 10:35:47 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
--null--Но еще весьма возможно тут с keep-alive проблемы и стоит глянуть на /proc/sys/net/ipv4/tcp_keepalive_time /proc/sys/net/ipv4/tcp_keepalive_probes /proc/sys/net/ipv4/tcp_keepalive_intvl попробовать echo 0 > /proc/sys/net/ipv4/tcp_keepalive_probes Каждый файл состоит только из одной строчки Файлзначение в нём/proc/sys/net/ipv4/tcp_keepalive_time7200/proc/sys/net/ipv4/tcp_keepalive_probes9/proc/sys/net/ipv4/tcp_keepalive_intvl75 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 10:51:16 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
а клиент и сервер на разных машинах или на одной? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 11:13:20 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
На разных. Для тестов клиента гоняю из под Windows. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 11:33:06 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
так на Linux клиент или сервер? Просто проблемы с таймаутами могут быть на обоих сторонах. И кроме того например при маскарадинге через ipchains бывают проблемы с таймаутами. И конечно как сказал Oerr надо смотреть софт. я бы еще вот что сделал: запротоколировал сниффером всю сессию, от начала до падения. Это может помочь понять, что же происходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 11:45:30 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Программа сервер - на linux Программа клиент - на windows Когда программа сервер была на windows - он часами не обрывал коннекта. При переносе программы сервера на linux он обламывает через 5 минут. Обламывает одну сессию, а не сам обламывается. Другие клиенты будут обломаны, когда их timeout пройдёт. Новый коннект этих юзеров и всё в порядке - новый timeout. Написано на Kylix3 с использованием компонентов Indy (TIdTCPServer и TIdTCPClient) Exception IdReadTimeout генерит серверный компонент TIdTCPServer. В доке сказано, что это происходит если из канала нет операций чтения в течение таймаута. Но дело в том, что я повесил Timer и они у меня ведут обмен через каждые 5 секунд в рамках своей сессии. И timeout он отмеряет не от последней операции чтения, а от начала сессии. Или он просто не сбрасывает счётчик после Read/Write данных в канал. К тому же у самих компонентов timeout=0, т.е им сказано не контролировать timeout вообще. Под windows они себя ведут нормально, под linux облом по timeout. Поскольку ни в программе, ни в самих компонентах нигде нет 5мин, 300 сек или 300000 мсек - я сделал вывод, что это уже системная настройка. И обламывает именно linux. Только не надо критиковать Kylix, что он старый, глючный и не поддерживается Borland. Я это и сам знаю. Но быстро и безболезненно не удастся перевести под Linux операционный зал из сервера БД, сервера приложений и 50-ти клиентов. Т.к. под win клиентская часть на C++Builder 6. С переводом её на Qt ещё надо попотеть. Тем более, что я уже перевёл всё, но сервер приложений через SOAP работает. Теперь хочу уйти на сокеты, поэтому заюзал Indy TIdTCPServer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 12:12:21 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
критиковать не буду, ибо я его просто не знаю :-) я бы все-таки посмотрел протокол сниффера, что же происходит, кто закрывает соединение и каким образом. Значения keep-alive в /proc видимо ни при чем, там таймаут другой будет. Imho это таймаут как раз этих TIdTCPServer и TIdTCPClient, может у них есть свойство где это можно понастраивать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 12:35:41 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
авторК тому же у самих компонентов timeout=0, т.е им сказано не контролировать timeout вообще. сорри не увидел, что уже знаете и пытались. Ну "вслепую" можно подергать параметры proc-овские, посмотреть, повлияет ли это вообще. Это и есть "системная часть" собственно. Ну и еще файрвол - как я упоминал, маскарадинг может портить длинные сессии или может еще что-то. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 12:40:15 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Admin сказал, что маскарадинга вообще там нет. Файрвол тоже маловероятно - он только разрешает или запрещает порты. Т.е. если бы файрвол - соединения совсем бы не было. Ладно - если на вскидку никто не знает - хрен с ним, не надо время тратить. В гугле порылся там все хотят наоборот занизить этот timeout. Передавать его надо в момент создания сокета. Если параметр не задан, он его берёт минимальным по умолчанию. Но непонятно откуда он его берёт. Собственно аналогичный сервер приложений я уже на Qt сваял. Вроде не обламывает. Мне теперь драйвер к БД для Qt найти или API заюзать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 12:55:53 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Берет по стандарту и если мне не изменяет память - то это 90 минут Так что скорее всего проблема в клиенте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2006, 19:10:18 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Ну, так, тема собственно и возникла, чтобы выяснить: 1. Откуда берёт??? 2. Где у него этот стандарт прошит??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 09:00:17 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
landy... и если мне не изменяет память - то это 90 минут ... Хороший таймаут ;). Может 90 секунд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:07:14 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
ZmeisheНу, так, тема собственно и возникла, чтобы выяснить: 1. Откуда берёт??? 2. Где у него этот стандарт прошит??? У меня соединения клиент/сервер сутками, а то и неделями висели (не обмениваясь данными). Может с кодом чего не то? Может alarm где-нибудь выставлен или функция неправильно вызвана, хотя чего гадать... Можешь (если не в лом конечно) показать сырцы (урезанные до минимума), ну или хотя бы привести алгоритм/схему взаимодействия своих клиентов с сервером? Ну что то навроде: server: socket, bind, accept; client: socket, connect; после connect Обмен данными через read/recv/recfrom, write/send/sendto, используешь ли select/pselect, какие-нибудь ioctl и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:22:57 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Стоп!!! Народ, а нафига тюнинговать систему??? Ведь можно все параметры настроить в своей софтине. Как я понял, Zmeishe ты пишешь на C/C++? Можешь показать кусок кода где ты создаешь сокет, коннектишься и т.п. Просто сейчас листаю книгу У.Р. Стивенс - "UNIX: разработка сетевых приложений". Смотрю функцию select: Код: plaintext 1. 2. 3. 4. Смотрим структуру timeval: Код: plaintext 1. 2. 3. 4. 5. (C) У.Р. Стивенс: С помощью этого аргумента можно реализовать 3 сценария: 1. Ждать вечно: завершать работу, только когда один из заданных дескрипторов готов для ввода-вывода. Для этого нужно определить аргумент структуры timeval как пустой указатель. ... ____________________________________________________________________________________ Можно задать таймаут для сокета с помощью Код: plaintext 1. 2. 3. 4. 5. (C) У.Р. Стивенс: Параметры сокета SO_RCVTIMEO и SO_SNDTIMEO: Эти два параметра сокета позволяют нам устанавливать тайм-аут при получении и отправке через сокет. Обратите внимание, что аргумент двух функций sockopt - это указатель на структуру timeval ... Это позволяет использовать для задания тайм-аута секунды и миллисекунды. Мы отключаем тайм-аут, установив его значение в 0 секунд и 0 миллисекунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:41:53 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
P.S.: А вообще рекомендую найти книгу Стивенса. Офигенный источник инфы по сабжу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:44:47 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
На сервере IdTCPServer1 выставлены след св-ва: ListenQueue = 15 ReuseSocket = rsOSDependent TetminateWaitTime = 5000; // мсек // Смысл первых двух не знаю. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. На клиенте IdTCPClient1 ReadTimeout=0; // типа не контролировать Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:54:14 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
не понимаю - неужели не судьба посмотреть tcpdump-ом, что же реально происходит? Хотя бы кто закрывает соединение и как. Ибо возможно Kilyx никаких таймаутов реально не выставляет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 10:57:41 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Просмотрел что речь идет о Киликсе... Ну тогда sorry - я пас :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 11:26:57 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
--null--не понимаю - неужели не судьба посмотреть tcpdump-ом, что же реально происходит? Хотя бы кто закрывает соединение и как. Ибо возможно Kilyx никаких таймаутов реально не выставляет. Я разработчик и в системные вещи лезу по крайней необходимости - времени нет. Admin после трёх будет, если будет. Он сегодя на курсах квалификацию повышает. Дело не Kylix. Там есть возможность сокетами рулить. Но мне сперва показалось проще и удобнее через Indy компоненты. На Windows так и было. Indy это разработка Nevron`ы. На Kylix они только прикручены, как сторонние компоненты. Работает у меня это звено через SOAP на Apache, перекомпилированным для работы с разделяемыми модулями (DSO). Ну и пусть работает. Дело в том что Apache не держит постоянную сессию по умолчанию. Отдал данные и прибил соединение. У меня из-за этого лишние накладные расходы при коннекте к БД и проверке прав пользователя. Чтобы Apache держал постоянную сессию ему надо в HTTP заголовке указать Connection: keep-alive. Но в Kylix компоненты TSOAPConnection или HTTPRIO не дают править этот заголовок (либо я не понял как и не нашёл где). Зато нашёл в анонсе Borlan Studio 2006 хвалебный перл, что вот теперь-то можно править HTTP заголовок. Но в этой Studio нет больше CLX. Вот я и решил немного оптимизировать и избавиться от накладных расходов на коннекты к БД, с использованием Indy. Отсюда вывод — из Kylix больше не выжать. И он больше не поддерживается. Кроме как на RH7.3 его больше ни к чему не удалось нормально прикрутить(то ядра не те, то glibc, то ещё чего-нибудь). Софт, написанный на C++Kylix, ещё как-то работает на новых Linux, а софт, написанный на Delphi Kylix, уже не работает на Fedore 5. Для RH7.3 я машину-то еле нашёл с IDE HDD и PS/2 мышью - уже везде SATA и USB. Нашёл я оптимальное решение, удалось мне быстро перекинуть весь софт на Linux и ладно. Фирма пусть работает, а я получил передышку после аврала и дальше на Qt пойду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 11:41:08 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Zmeishe --null-- Значит выход один - RTFM'ить по докам. По любому должны быть средства для настройки сокетов в либах, которые Вы используете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 14:02:08 |
|
||
|
Socket Timeout, TCP Timeout
|
|||
|---|---|---|---|
|
#18+
Теоретически - ДА! Практически - нет смысла ворошить доки к продукту, который вышел в 2002 году и был брошен. Даже patch`и для него писали энтузиасты, а не разработчики Борланда. Лучше читать новые доки к новым средствам разработки (или к старым проверенным, которые хотя бы поддерживаются и обновляются регулярно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.11.2006, 14:43:23 |
|
||
|
|

start [/forum/topic.php?fid=25&msg=34156923&tid=1488749]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
44ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 320ms |

| 0 / 0 |
