Форум: "Сети";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
ВнизМУЖИКИ, подскажите как корректно обрабатывать ексепшены Найти похожие ветки
← →
Лёша (2003-07-28 14:15) [0]возникающие при неудачном подключении к серверу. Использую TClientSocket. Когда сервер не в сети, а я пытаюсь подцепиться ему в порт после вылазит ексепшен (ESocketError "Asinchronous socket error 10060").
Так вот, как его обработать так, чтобы не вылазила месага?
Заранее благодарю.
← →
Digitman (2003-07-28 14:46) [1]procedure TMyForm.ClientSocket1OnError(..);
begin
ErrorCode := 0;
Socket.Close;
end;
← →
Лёша (2003-07-28 14:52) [2]>Digitman
Спасибо!
← →
Morfein (2003-07-28 22:47) [3]А лучше в дополнение ещё и вызов процедуры ClientSocket1.Open (или ClientSocket1.Active:=true) обрамить в try-except.
← →
Polevi (2003-07-29 10:21) [4]2Morfein © (28.07.03 22:47)
в асинхронном режиме это лишнее
← →
Fredericco (2003-07-29 10:30) [5]2Polevi © (29.07.03 10:21)
Если я не ошибаюсь, то Digitman в свое время мне говорил, что если не уничтожать гнездо при ошибке коннекта 10055 то метод Open вызовет искл. ситуацию.
← →
Digitman (2003-07-29 10:31) [6]
> Polevi
ну может и не лишнее, положим)... ибо могут возникнуть и иные исключения, не связанные с результатами коннекта
← →
Polevi (2003-07-29 10:31) [7]2Fredericco © (29.07.03 10:30)
в асинхронном режиме это надо делать в соотв. обработчике
← →
Polevi (2003-07-29 10:32) [8]2Digitman © (29.07.03 10:31)
чтоже мне теперь вызов любой ф-ии в try-except заключать что ли :)
← →
Digitman (2003-07-29 11:13) [9]
> Polevi
ну почему же сразу "любой" ?) масса же синхронных отказов может иметь место в принципе ! Самые критичные к этому точки алгоритма и следует, наверно, в "скобки" заключать ...
а если, к примеру, Winsock-ядро отказало ? мало ли насколько ресурсоемко приложение в целом ! или - мало ли что может произойти с вирт.петлей соединения, когда send/recv уже вызваны, но - до возврата wsaewouldblock ! в ряде случаев обнаружение штатного/нештатного дисконнекта петли в асинхр.режиме удобней фиксировать не "ловлей" асинхр.события дисконнекта, а синхронной "ловлей" исключения ...
Пример - после коннекта удал.партнер по петле неожиданно потерял связь со своим прокси по физ.причинам. Асинхр.дисконнекта не жди - лог.разрыва еще нет, его прокси "держит" соединение в кэше несколько минут. В момент твоей KeepAlive-посылки ты вполне можешь получить (от его прокси) синхронную WSAECONNABORTED, которая как раз и д.б. обработана у тебя в except-блоке с закрытием своего гнезда.
← →
Polevi (2003-07-29 12:36) [10]>В момент твоей KeepAlive-посылки
речь шла о connect а не send
← →
Digitman (2003-07-29 13:44) [11]
> Polevi
ну и коннект в том числе !)... считаешь, кроме как по отказу коннекта из-за недоступности хоста/порта иных причин нет для возбуждения синхр.исключения в ходе процедуры коннекта ? Не есть это хорошо - игнорировать оные)
а речь как раз шла о
> чтоже мне теперь вызов любой ф-ии в try-except заключать
> что ли
любая ф-ция - это в т.ч. и ф-ция отправки/приема сообщения
← →
Verg (2003-07-29 13:50) [12]
> Polevi ©
Если интересно, проведи эксперимент:
Win98
Никаких сетевых карт - только дииалап.
Установи модемное соединение с инетом
Запусти свою программу, в которой по кнопке ClientSocket1.Activ:=true
При этом если соединение не происходит, то появляются OnError (все как бы грамотно)
Теперь установи соединение с любым хостом, так, теперь разединись и не выходя из своей программы разорви диалап соединение. Дальнейшие попытки соединится с тем хостом, с которым соединялся при живом диалапе будут приводить не к OnError а к исключениям при .Activ:=true
Поэтолу, в общем случае try except end;
← →
Polevi (2003-07-29 15:16) [13]ладно , уболтали, нужен try, TClientSocket кучу excpetions может в методе Open срейзить.. давно его не использовал
procedure TCustomWinSocket.Open(const Name, Address, Service: string; Port: Word; Block: Boolean);
begin
if FConnected then raise ESocketError.CreateRes(@sSocketAlreadyOpen);
FSocket := socket(PF_INET, SOCK_STREAM, IPPROTO_IP);
if FSocket = INVALID_SOCKET then raise ESocketError.CreateRes
...
end;
← →
Digitman (2003-07-29 15:30) [14]
> Polevi
долго ж тебя "убалтывать" пришлось)
← →
Polevi (2003-07-29 15:32) [15]я такой капризный :) LOL
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.09.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.013 c