powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Socket Timeout, TCP Timeout
25 сообщений из 25, страница 1 из 1
Socket Timeout, TCP Timeout
    #34156717
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 сек.

Где ещё может находиться подобное ограничение?
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34156783
Фотография Oerr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
/usr/include/linux/socket.h and types.h?


http://surgutnet.ru
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34156786
Фотография Oerr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зыбыл добавить.
Нужно искать не ограничение, а переписывать ваш софт.

http://surgutnet.ru
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34156855
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oerr/usr/include/linux/socket.h and types.h?

Там кроме #define констант больше нет ничего.
Ни одна не похожа на Timeout или ReadTimeout.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34156861
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Помню тот вопрос. Но у Вас совсем другое - там у демона был предусмотрен таймаут и он запускался через 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

не факт что поможет, но попробовать можно
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34156923
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--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
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34157016
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а клиент и сервер на разных машинах или на одной?
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34157116
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На разных.

Для тестов клиента гоняю из под Windows.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34157165
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так на Linux клиент или сервер?

Просто проблемы с таймаутами могут быть на обоих сторонах.
И кроме того например при маскарадинге через ipchains бывают проблемы с таймаутами.

И конечно как сказал Oerr надо смотреть софт.

я бы еще вот что сделал: запротоколировал сниффером всю сессию, от начала до падения.
Это может помочь понять, что же происходит.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34157284
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программа сервер - на 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.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34157371
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
критиковать не буду, ибо я его просто не знаю :-)
я бы все-таки посмотрел протокол сниффера, что же происходит, кто закрывает соединение и каким образом.
Значения keep-alive в /proc видимо ни при чем, там таймаут другой будет.
Imho это таймаут как раз этих TIdTCPServer и TIdTCPClient, может у них есть свойство где это можно понастраивать.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34157388
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторК тому же у самих компонентов timeout=0, т.е им сказано не контролировать timeout вообще.

сорри не увидел, что уже знаете и пытались.
Ну "вслепую" можно подергать параметры proc-овские, посмотреть, повлияет ли это вообще.
Это и есть "системная часть" собственно.
Ну и еще файрвол - как я упоминал, маскарадинг может портить длинные сессии или может еще что-то.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34157443
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Admin сказал, что маскарадинга вообще там нет.
Файрвол тоже маловероятно - он только разрешает или запрещает порты.
Т.е. если бы файрвол - соединения совсем бы не было.

Ладно - если на вскидку никто не знает - хрен с ним, не надо время тратить.
В гугле порылся там все хотят наоборот занизить этот timeout. Передавать его надо в момент создания сокета. Если параметр не задан, он его берёт минимальным по умолчанию.
Но непонятно откуда он его берёт.

Собственно аналогичный сервер приложений я уже на Qt сваял. Вроде не обламывает.
Мне теперь драйвер к БД для Qt найти или API заюзать.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34158950
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Берет по стандарту и если мне не изменяет память - то это 90 минут
Так что скорее всего проблема в клиенте
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34159579
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, так, тема собственно и возникла, чтобы выяснить:
1. Откуда берёт???
2. Где у него этот стандарт прошит???
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34159749
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landy... и если мне не изменяет память - то это 90 минут ...

Хороший таймаут ;). Может 90 секунд?
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34159799
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZmeisheНу, так, тема собственно и возникла, чтобы выяснить:
1. Откуда берёт???
2. Где у него этот стандарт прошит???
У меня соединения клиент/сервер сутками, а то и неделями висели (не обмениваясь данными). Может с кодом чего не то? Может alarm где-нибудь выставлен или функция неправильно вызвана, хотя чего гадать... Можешь (если не в лом конечно) показать сырцы (урезанные до минимума), ну или хотя бы привести алгоритм/схему взаимодействия своих клиентов с сервером? Ну что то навроде:
server: socket, bind, accept;
client: socket, connect; после connect
Обмен данными через read/recv/recfrom, write/send/sendto, используешь ли select/pselect, какие-нибудь ioctl и т.д.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34159865
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Стоп!!! Народ, а нафига тюнинговать систему??? Ведь можно все параметры настроить в своей софтине.

Как я понял, Zmeishe ты пишешь на C/C++? Можешь показать кусок кода где ты создаешь сокет, коннектишься и т.п.

Просто сейчас листаю книгу У.Р. Стивенс - "UNIX: разработка сетевых приложений". Смотрю функцию select:

Код: plaintext
1.
2.
3.
4.
#include <sys/select.h>
#include <sys/time.h>

int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set* exceptset, const struct timeval *timeout);

Смотрим структуру timeval:

Код: plaintext
1.
2.
3.
4.
5.
struct timeval 
{
    long tv_sec;   /* секунды*/
    long tv_usec; /* микросекунды */ 
}

(C) У.Р. Стивенс:

С помощью этого аргумента можно реализовать 3 сценария:

1. Ждать вечно: завершать работу, только когда один из заданных дескрипторов готов для ввода-вывода. Для этого нужно определить аргумент структуры timeval как пустой указатель.

...

____________________________________________________________________________________


Можно задать таймаут для сокета с помощью

Код: plaintext
1.
2.
3.
4.
5.
struct timeval tv;

...

setsockopt(int sockfd, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof(tv));

(C) У.Р. Стивенс:

Параметры сокета SO_RCVTIMEO и SO_SNDTIMEO:

Эти два параметра сокета позволяют нам устанавливать тайм-аут при получении и отправке через сокет. Обратите внимание, что аргумент двух функций sockopt - это указатель на структуру timeval ... Это позволяет использовать для задания тайм-аута секунды и миллисекунды. Мы отключаем тайм-аут, установив его значение в 0 секунд и 0 миллисекунд.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34159875
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S.: А вообще рекомендую найти книгу Стивенса. Офигенный источник инфы по сабжу
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34159920
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сервере 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.
void __fastcall TfrmMain::IdTCPServer1DataRequestCommand(TIdCommand *ASender)
{// Обработчик запроса клиента
 Tdm *DM;
 TClientDataSet *cds;
 TMemoryStream *Stream;
 TMemoryStream *CodeStream;
 DM = (Tdm*) ASender->Thread->Data;
 if(DM != NULL){
 ASender->CommandHandler->Disconnect = false;

 cds = new TClientDataSet(this);
 cds->Data = DM->DataRequest(NULL, NULL); // Для теста без параметров
 Stream = new TMemoryStream();

 cds->SaveToStream(Stream);

 delete cds;

 ASender->Thread->Connection->OpenWriteBuffer();
 Stream->Position =  0 ;
 ASender->Thread->Connection->WriteStream(Stream);
 ASender->Thread->Connection->CloseWriteBuffer();

 Stream->Position =  0 ;
 delete Stream;
 }
}
//---------------------------------------------------------------------------


На клиенте IdTCPClient1
ReadTimeout=0; // типа не контролировать
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
void __fastcall TForm1::Button1Click(TObject *Sender)
{ // Запрос к серверу
 int size;
 TMemoryStream *Stream;
 Stream = new TMemoryStream();

  IdTCPClient1->WriteLn("DataRequest");

  size = IdTCPClient1->ReadInteger();
  IdTCPClient1->ReadStream(Stream, size, false);

  Stream->Position =  0 ;
  ClientDataSet1->LoadFromStream(Stream);

  delete Stream;
  IdTCPClient1->CheckForGracefulDisconnect();
}
//---------------------------------------------------------------------------
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34159933
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не понимаю - неужели не судьба посмотреть tcpdump-ом, что же реально происходит?
Хотя бы кто закрывает соединение и как.
Ибо возможно Kilyx никаких таймаутов реально не выставляет.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34160071
Фотография v6y
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Просмотрел что речь идет о Киликсе... Ну тогда sorry - я пас :)
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34160145
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--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 пойду.
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34160809
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Zmeishe --null--

Значит выход один - RTFM'ить по докам. По любому должны быть средства для настройки сокетов в либах, которые Вы используете...
...
Рейтинг: 0 / 0
Socket Timeout, TCP Timeout
    #34160961
Фотография Zmeishe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теоретически - ДА!
Практически - нет смысла ворошить доки к продукту, который вышел в 2002 году и был брошен. Даже patch`и для него писали энтузиасты, а не разработчики Борланда.
Лучше читать новые доки к новым средствам разработки (или к старым проверенным, которые хотя бы поддерживаются и обновляются регулярно).
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Socket Timeout, TCP Timeout
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]