Форум: "Сети";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
ВнизОбработка ошибок (TClientSocket) Найти похожие ветки
← →
Argentum (2004-11-06 15:58) [0]Если я в обработчике onError просто пишу:
ErrorCode:=0
Но что реально происходит с соединением? Продолжает работать?
Если я хочу при любой ошибке закрывать сокет, то можно ли написать так:
ErrorCode:=0;
ClientSocket1.Active:=False
Будет ли всё работать правильно? Т.е. сокет закроется и выполниться событие onDisconnect (если до этого было соединение).
← →
Verg © (2004-11-06 17:43) [1]
> ErrorCode:=0;
> ClientSocket1.Active:=False
Socket.Close
А если совсем правильно, то
ErrorCode := 0;
if Socket.Handle <> INVALID_SOCKET then
Socket.Close;
Где Socket - это именно тот параметр, который передают тебе в событии, а не что-то другое.
> Но что реально происходит с соединением? Продолжает работать?
>
Само соединение либо еще вообще не установлено, либо уже разорвано.
Дескриптор сокета остался живым.
Socket.Close; делается в угоду компонентам TClientSocket, ибо в некоторых ситуациях связанных с принудительным закрыванием еще неустановленного соединения (прерываение попытки соединения, по таймауту, например) они сами (ClientSocke1.Active = false) "забывают", а точнее сказать считают почему-то ненужным, освобождать системный дескриптор сокета. Что приводит к нехорошему явлению - утечка системных ресурсов.
← →
Argentum (2004-11-08 16:40) [2]Verg
А если совсем правильно, тоErrorCode := 0;
if Socket.Handle <> INVALID_SOCKET then
Socket.Close;
Компилятор говорит, что
if Socket.Handle <> INVALID_SOCKET then
"comprasion always evaluates to true" - есть смысл в этом сравнении?
← →
Verg © (2004-11-08 20:31) [3]
> Компилятор говорит, что
Правильно говорит - надо SocketHandle
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.032 c