Ошибка socket error 10055
Expert
Регистрация: 07-Мар-07
Местонахождение: Russian Federation
Статус: Offline
Количество сообщений: 1986
Параметры сообщения 


Добавлено: 25-Май-09 в 16:49
Тип события: Предупреждение
Источник события: Traffic Inspector Server
Категория события: Traffic Inspector service
Код события: 21504
Дата: 25.05.2009
Время: 16:07:46
Пользователь: Н/Д
Компьютер: HOSTSERV
Описание:
[HTTP proxy] socket error 10055 — No buffer space available
после этой ошибки перестал работать сервер терминалов , только он использует прокси (кеш отключен).
По сетевой статистике , сессии на прокси сервер шли и по 53 порту и по 80 , но в мизерном количестве и интернета не было.
нашел пост с аналогичной проблемой
Причина ошибки — в системе открыто очень много сокетов. По умолчанию лимит где-то на 4000 (на вскидку, мог и подзабыть).
Откройте Диагностика, Сокеты и поглядите, что там есть. Сколько сокетов и какие процессы их открыли.
единственный сервис , который в данный момент так открыл сокеты это DNS.
Пересеклось с темой:
http://forum.smart-soft.ru/forum_posts.asp?TID=16750&KW= DNS+UDP&PN=0&TPN=1
Настроил DNS на минимально открытые сокеты , буду тестировать.
Раньше проблема была по аналогии такой же
http://forum.smart-soft.ru/forum_posts.asp?TID=18574&PN= 3
с начала ошибок 1450 отваливался Сервер терминалов, затем все остальные клиенты, обновил драйвера на сетевухи. Сервер проработал чуть больше недели с момента рестарта той проблемы и до начала этой.
Больших списочных фильтров не имею.
Ребутнули сервер.
Зы отчеты с ссылкой на форум выслал.
ЗЗЫ. Очень не нравится , когда на форуме не отвечает сапорт.
ТИ 2.0.1.725 + W2k8 (550 клиентов/до 380 активных, канал 200 мегабит)
Прежде чем купить ТИ, почитайте подход разработчиков к решению многих проблем, как быстро они эти проблемы решают.
Windows socket error 10055 on api connect
Мой клиент делает безуспешные попытки соеденится к отсуствующему серверу каждые 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» можно закрыть ИМХО.
Windows socket error 10055 on api connect
Мой клиент делает безуспешные попытки соеденится к отсуствующему серверу каждые 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» можно закрыть ИМХО.


