Форум: "Сети";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизСокеты... ошибка 11001 и пр. Что с ними делать? Найти похожие ветки
← →
SergP (2003-09-28 13:23) [0]Что можно сделать чтобы избавится от "выскакивания" окна с сообщением об ошибке 11001 и других ошибок, которые не устраняются с помощью:
procedure TForm1.ServerSocketClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
...
ErrorCode:=0;
...
end;
И вообще как эти ошибки можно обработать програмно?
← →
Анатолий (2003-09-28 20:32) [1]если знаешь часть кода на которой бывает ошибка попробуй заключить ее в try ... except
← →
SergP (2003-09-28 20:54) [2]Ошибка 11001 возникает при попытке конекта клиентсокета когда у меня инет отключен. Но что заключать в try..except..end;?
Clientsocket.open пробовал заключать - не помогает.
← →
Sergp (2003-09-29 14:01) [3]Ну что? Никто не подскажет?
Дело в том что как-то некрасиво когда в проге выскакивают сообщения об ошибках, пусть даже и в тот момент когда ее нельзя использовать...
← →
Анатолий (2003-09-29 14:04) [4]найди отладчиком момент возникновения ошибки, может это не cs.open а где то в другом месте ? пройди по проге пошагам и найди...
← →
Polevi (2003-09-29 14:05) [5]Application.OnException поймает все не обработанные исключения
← →
Sergp (2003-09-29 14:24) [6]
> Анатолий (29.09.03 14:04) [4]
> найди отладчиком момент возникновения ошибки, может это
> не cs.open а где то в другом месте ? пройди по проге пошагам
> и найди...
В хелпе написано :
11001 Authoritative answer: Host not found.
У меня так оно и есть... Неподключен к инету - возникают такие ошибки при попытке сокета сконектиться. Так что имхо однозначно в этом виноват clientsocket при попытке сделать ему open...
насчет отладчика попытаюсь...
> Polevi © (29.09.03 14:05) [5]
> Application.OnException поймает все не обработанные исключения
Можно подробнее с небольшим примерчиком?
Да и кстати, у меня иногда (очень редко при работе проги вылезает окно с ошибкой вроде External exception 80000003 (точно не помню) , что это такое? И можно ли с помощью Application.OnException и ее тоже устранить?
← →
Sergp (2003-09-29 14:24) [7]
> Анатолий (29.09.03 14:04) [4]
> найди отладчиком момент возникновения ошибки, может это
> не cs.open а где то в другом месте ? пройди по проге пошагам
> и найди...
В хелпе написано :
11001 Authoritative answer: Host not found.
У меня так оно и есть... Неподключен к инету - возникают такие ошибки при попытке сокета сконектиться. Так что имхо однозначно в этом виноват clientsocket при попытке сделать ему open...
насчет отладчика попытаюсь...
> Polevi © (29.09.03 14:05) [5]
> Application.OnException поймает все не обработанные исключения
Можно подробнее с небольшим примерчиком?
Да и кстати, у меня иногда (очень редко при работе проги вылезает окно с ошибкой вроде External exception 80000003 (точно не помню) , что это такое? И можно ли с помощью Application.OnException и ее тоже устранить?
← →
Polevi (2003-09-29 14:51) [8]окно можно устранить, но ты лучше устрани причину
← →
nikkie (2003-09-29 16:18) [9]а почему ты думаешь, что ошибку вызывает серверный сокет? скорее клиентский - и обрабатывать ошибку надо в СlientSocket.OnError.
← →
Sergp (2003-09-29 19:38) [10]Хм... Опять как оказалось не тот кусок кода написал. Просто обработчики у меня почти одинаковые...
Вот точная копия обоих обработчиков. В обоих я Errorcode устанавливаю в 0, но это не помогает. И по всей видимости при ошибке 11001 OnError не вызывается...
procedure TForm1.ClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
memo1.lines.add("CSError "+inttostr(ErrorCode)+" "+inttostr(integer(sender)));
TCustomWinSocket(socket.data).free;
ErrorCode:=0;
PostMessage(Form1.Handle, KILL_SOCKET, 0,integer(Sender));
end;
procedure TForm1.ServerSocketClientError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
memo1.lines.add("SSError "+inttostr(ErrorCode)+" "+inttostr(integer(socket.data)));
KSocket(socket.data).free;
ErrorCode:=0;
Postmessage(Form1.Handle, KILL_SOCKET, integer(socket),0);
end;
А насчет второй ошибки, я даже не могу понять от чего она возникает, причем очень редко. Вроде бы уже принял все меры против этого...
← →
aprm_85 (2003-09-30 22:52) [11]А может прежде чем коннектится к хосту, проверить, есть ли Инет?
Если dial-up, все просто: TMagRAs (компонент для работы с dialup)
С выделенкой - сложнее. там возможгы варианты
← →
SergP (2003-10-01 07:21) [12]
> aprm_85 © (30.09.03 22:52) [11]
> А может прежде чем коннектится к хосту, проверить, есть
> ли Инет?
> Если dial-up, все просто: TMagRAs (компонент для работы
> с dialup)
> С выделенкой - сложнее. там возможгы варианты
Это ИМХО излишне. Да и как оказалось эта ошибка ловится Application.OnException как советовал Polevi. Просто я этой штукой никогда не пользовался раньше и сначала не пользовался потому, что хотел бы иметь сначала пример прежде чем использовать, но в связи с тем что примера так и никто не дал, пришлось самому экспериментировать.
← →
nikkie (2003-10-01 13:44) [13]Application.OnException - это, конечно, лом, против которого нет приема. Только прибегать к нему стоит, если ты совсем сдался сделать по нормальному.
Я только что попробовал - 11001, "Windows socket error: No such host is known (11001), on API "ASync Lookup"" прекрасно ловится и гасится в OnError (по-крайней мере в D6). Ты пробовал это в тестовом приложении - один клиентский сокет на форме? Попробуй. И покажи, как ты создаешь сокет в приложении, где у тебя проблема.
← →
SergP (2003-10-02 08:56) [14]2 nikkie У меня D5... Да и переходить на D6 почему-то не очень хочется. Хотя возможно что придется... Не знаю почему оно у Вас ловится в onError, но у меня ловятся там все остальные ошибки кроме 11001.
А насчет того чтобы показать как что и где я создаю - может лучше я скину исходник на мыло? А то много постить тут нужно...
← →
Digitman (2003-10-02 09:15) [15]
> SergP
по кр.мере в D5 отказ с кодом WSAHOST_NOT_FOUND = 11001 не может быт перехвачен в событии OnError, только - в App.OnException
этому есть вполне четкое объяснение, достаточно взглянуть в исх.текст компонента
procedure TCustomWinSocket.CMLookupComplete(var Message: TCMLookupComplete);
begin
if Message.LookupHandle = FLookupHandle then
begin
FLookupHandle := 0;
if Message.AsyncError <> 0 then
begin
Disconnect(FSocket);
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(Message.AsyncError), Message.ASyncError, "ASync Lookup"]);
end;
.....................
end;
end;
← →
Digitman (2003-10-02 09:29) [16]> SergP
для того чтобы избавиться от вынужденной обработки отказа в App.OnException, необходимо явно св-ва Address и Port (т.е. явный IP-адрес и явный номер порта), оставляя св-ва Host и Service пустыми
в этом случае не будут задействованы службы, разрешающие имя хоста в его адрес и имя сервиса в номер соотв.порта
как раз эти службы, будучи задействованными при неуказании явно адреса и порта, вызывают внутри компонента ф-ции [WSAAsync]GetHostByName (хост -> адрес) и [WSAASync]GetServByName (имя сервиса -> номер порта) ... именно эти ф-ции генерируют отказ с упомянутым кодом, и отказ этот обрабатывается компонентом столь нецдобно, по твоему мнению.
есть другие варианты - работать либо с блок.гнездом (тогда исключения во всех методах компонента "ловятся" банальным try..except) либо работать с неблок.гнездом, но указывать адрес+порт явно, проводя перед коннектом разрешение имен самостоятельно явными вызовами вышеупомянутых Winsock-ф-ций.
← →
nikkie (2003-10-02 13:46) [17]что ж, значит, в D5 действительно нужен лом. а в D6 код такой:
procedure TCustomWinSocket.CMLookupComplete(var Message: TCMLookupComplete);
var
ErrorCode: Integer;
begin
if Message.LookupHandle = FLookupHandle then
begin
FLookupHandle := 0;
if Message.AsyncError <> 0 then
begin
ErrorCode := Message.AsyncError;
Error(Self, eeLookup, ErrorCode);
Disconnect(FSocket);
if ErrorCode <> 0 then
raise ESocketError.CreateResFmt(@sWindowsSocketError,
[SysErrorMessage(Message.AsyncError), Message.ASyncError, "ASync Lookup"]);
Exit;
end;
...
end;
end;
← →
Digitman (2003-10-02 14:09) [18]
> nikkie
скорее всего это был маленький недосмотр со стороны Борланда
в 6-ке его исправили
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.012 c