Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Вниз

Ну кто-нибуть толком обяснит что за ошибка 10055,on API Connect ?   Найти похожие ветки 

 
yuravss   (2002-02-25 04:45) [0]

Мой клиент делает безуспешные попытки соеденится к отсуствующему серверу каждые 3 сек (по таймеру). Если сервер запустить через некоторое время, он нормально подконектится, но если это время большое (>10 мин) то клиент тупо отказывается конектится к уже запущеному серверу. При отладке клиента я обнаружил, что при многочисленных ,безуспешных попытках подконектится, клиент вскорее генерирует exception в ответ на ClientSocket1.open. Код ошибки 10055, on API Connect. И потом при следующих попытках соединения (каждые 3 сек) через ClientSocket1.open это exception постоянно возникает. В чем дело ? Привожу фрагменты кода.

//Таймер - каждые 3 сек.
procedure TForm1.ConnectingTimerTimer(Sender: TObject);
begin
....
try
sleep(100);
ClientSocket1.open; //Генерирует ошибку через 10 мин.
except
//Вот тут происходит обработка ошибки 10055
ClientSocket1.close;
end;
end;

//Обработка ошибки, если сервер неактивен.
//Но через 10 мин. Этот код уже не будет выполнятся в ответ на ClientSocket1.open, поскольку возникает ошибка 10055.

procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
ErrorCode:=0;
ClientSocket1.close;
ConnectingTimer.enabled:=true;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ConnectingTimer.enabled:=false;
end;
---------------------
Почему ошибка возникает ? Такое ощущение что это вина Windows.
Я нашел исходники к компоненте FTP. Вот что там написано по поводу ошибки 10055:
For an unknown reason, winsock need time to send last data buffer. Without this delay, we may end with a partial file transfer. See comments in DoPutAppendAsync function. Normally using Linger option would handle this case. But many winsock implementations will end with a 10055 error after a lot of consecutive file transfers.
Что бы это значило ? Задержка то у меня стоит sleep(100)


 
yuravss   (2002-02-25 12:30) [1]

Кстати вот нашел описание этой ошибки:

10055 is an WinSock"s (Microsoft"s TCP/IP stack implementation) error code.
What causes this bug?
WSAENOBUFS should occur when the system has not enough memory or other system resources to open new TCP/IP socket or to handle socket data. It looks like that in most cases the problem occurs when total count of opened sockets reaches some magical number. MS writes that this limit is 3976 simultaneously opened sockets but it seems that on Win9x systems the real limit is much lower.
Proxy+ uses permanently about 10-20 opened sockets (it depends on configuration, number of defined Mapped Links,...) and each client request allocates two sockets - one for client side and one for server side of connection. Because TCP/IP system doesn"t free sockets immediately when they are closed (socket remains allocated for 240 seconds after application closes it) it is possible that system will report WSAENOBUFS due to lack of free socket resources.
-------------
Только я не пойму из-за чего у меня происходит переполнение сокетного буфера. Я ведь использую функцию close для сокета в случае неудачного конекта.


 
yuravss   (2002-02-25 20:24) [2]

Неужели никто не сталкивался с этой проблеммой ?
Я уже было потерял надежду.

Перекопал пол инет, но нашел в чем дело !

Оказывается в обработчике TForm1.ClientSocket1Error надо писать не ClientSocket1.close, а socket.close. Тогда все нормально. А доказательства о переполнении сокетного буфера я видел наочно
(команда: netstat -an )

Помоему проблема решена. Тему "10055 error" можно закрыть ИМХО.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2002.05.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.005 c
3-26003
Jakov
2002-04-05 13:59
2002.05.09
.dbx - ?


1-26065
VS2001
2002-04-18 18:15
2002.05.09
Как высчитать интервал прошедшего времени в минутах


3-25985
Пикулев Евгений
2002-04-15 11:08
2002.05.09
Количество записей в DBGride


3-26026
Кэп
2002-04-16 15:26
2002.05.09
Как программно задать нужную кодировку таблицы?


6-26202
_Serega_
2002-02-20 07:57
2002.05.09
Как убрать сообщения об ошибках ?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский