Форум: "Сети";
Текущий архив: 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.006 c