![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ServerSocket, ClientSocket и "выдергивание шланга из сетевухи" [D7, Win2k, WinXP]
Denizzz © (2006-10-25 12:51:00)Как отловить разрыв соединения при выдергивании шланга из сетевой платы (отказ свитча и т.п.)?
Проверял - событие OnClientError и OnError не происходит.
Сергей М. (2006-10-25 15:00:00) [21]Если так то шланг - на месте.
Либо ты врешь, утверждая что условия в [24] истинны.
Denizzz (2006-10-25 14:59:00) [22]да, так и есть
Сергей М. (2006-10-25 14:50:00) [23]т.е. ты утверждаешь, что:
1) ты поймал упомянутый брейкпойнт.
2) пошел и выдернул "шланг" у парнера по соединению
3) нажал F9
4) не получил исключения на уже упомянутой выше строчке с брейкпойнтом
5) и не поймал брейкпойнт на строчке ErrorCode := 0; (см. обработчик OnError)
?
Denizzz (2006-10-25 14:45:00) [24]она выполняется
Denizzz (2006-10-25 14:45:00) [25]ловит
Сергей М. (2006-10-25 14:43:00) [26]Что занчит "ничего" ? Не ловишь ее или что ?
Denizzz (2006-10-25 14:37:00) [27]Да. Ничего
Сергей М. (2006-10-25 14:23:00) [28]
> ClientSocket1.Socket.SendText('.'); //<- Сюда брейкпойнт ставил ?
Denizzz (2006-10-25 14:22:00) [29]
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode=10061 then
Memo1.Lines.Add(DateTimeToStr(Now())+' - текст')
else if ErrorCode=10053 then begin
Memo1.Lines.Add(DateTimeToStr(Now())+' - текст');
Memo1.Lines.Add('- текст');
end;
Memo1.Lines.Add(DateTimeToStr(Now())+' - Код ошибки '+IntToStr(ErrorCode));
ErrorCode := 0;
SpeedButton1.Enabled:=False;
ClientSocket1.Close;
Icona('error.ico',NIM_MODIFY);
TimerWait.Enabled:=True;
Denizzz (2006-10-25 14:21:00) [30]
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode=10061 then
Memo1.Lines.Add(DateTimeToStr(Now())+' - Ñîåäèíåíèå ñ ñåðâåðîì îòñóòñòâóåò')
else if ErrorCode=10053 then begin
Memo1.Lines.Add(DateTimeToStr(Now())+' - Ñîåäèíåíèå ñ ñåðâåðîì ïîòåðÿíî');
Memo1.Lines.Add('- áóäåò âêëþ÷åí òàéìåð ïðîâåðêè ñîåäèíåíèÿ');
end;
Memo1.Lines.Add(DateTimeToStr(Now())+' - êîä îøèáêè '+IntToStr(ErrorCode));
ErrorCode := 0;
SpeedButton1.Enabled:=False;
ClientSocket1.Close;
Icona('error.ico',NIM_MODIFY);
TimerWait.Enabled:=True;
Denizzz (2006-10-25 14:20:00) [31]при этом если проверять
if ClientSocket1.Socket.Connected=True then
Memo1.Lines.Add('s-s-s') else Memo1.Lines.Add('w-w-w');
возвращает 's-s-s'
Сергей М. (2006-10-25 14:19:00) [32]и еще обработчик OnError ..
Denizzz (2006-10-25 14:18:00) [33]
procedure TForm1.TimerTestTimer(Sender: TObject);
begin
ClientSocket1.Socket.SendText('.');
end;
Сергей М. (2006-10-25 14:09:00) [34]Показывай код..
Denizzz (2006-10-25 14:03:00) [35]но ведь я так и делаю по таймеру (8)!!
Сергей М. (2006-10-25 14:01:00) [36]Ну и что ?
Как только ты попытаешься что-нть почитать или пописАть для этого соединения, тут же получишь исключение - это и будет фактом "шланга".
Denizzz (2006-10-25 13:48:00) [37]вот-вот... а шланг выдернут :(
Сергей М. (2006-10-25 13:43:00) [38]Значит на момент исполнения этого "делаю" ситуации а-ля "шланговая" не возникает.
Denizzz (2006-10-25 13:42:00) [39]Делаю ClientSocket1.Socket.SendText('бла-бла'); - ошибки не возникает
Сергей М. (2006-10-25 13:26:00) [40]И чем в этом случае таймер не вариант ?