Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.02.03;
Скачать: CL | DM;

Вниз

Как определить, что соединение разорвано?   Найти похожие ветки 

 
Nucer   (2007-05-21 19:00) [0]

Использую TClientSocket. Если грубо говоря выдернуть кабель из сетевой карты, то событие OnDisconnect/OnError не произойдет, пока не будет принята попытка отправить какой-нибудь данные... и то в этом случае задержка между вызовом send и событием может составить около 10ти секунд.

Можно как-нибудь обойтись без отправки и ускорить процесс?


 
DVM ©   (2007-05-21 21:20) [1]


> Можно как-нибудь обойтись без отправки и ускорить процесс?

Вот объясните мне, зачем надо обязательно знать, что соединение потеряно, если все равно ничего не передается?


 
Nucer   (2007-05-21 21:27) [2]

Для того, чтобы восстановить соединение.
---
Клиент соединяется с сервером, редко шлет какую-либо информацию, в основном получает ее. Но, сервер может и не слать ничего на протяжении пят минут, а потом отправить один пакет. Так вот если соединение разорвано, то клиент быстро соединяется заново. Но проблема в том, что в определенных случаях событие Disconnect возникает с очень большой задержкой.


 
Сергей М. ©   (2007-05-22 08:14) [3]


> в определенных случаях событие Disconnect возникает с очень
> большой задержкой


Рассказывай подробно про эти "определенные случаи" ..


 
Nucer   (2007-05-22 09:08) [4]

>Рассказывай подробно про эти "определенные случаи"...
К примеру, если я перезагружу свой роутер... в таком случае программа вообще не определит, что соединение разорвано пока не будет принята попытка передать данные.


 
Сергей М. ©   (2007-05-22 09:16) [5]


> Nucer   (22.05.07 09:08) [4]


Т.е. ты утверждаешь, что в данной конкретной ситуации событие OnDisconnect возникнет намного позже успешного (??) вызова Send-метода, так ?

Не верю.


 
Nucer   (2007-05-22 09:29) [6]

Нет, в данной ситуации я имел ввиду, что без вызова send события OnDisconnect можно ждать очень долго. А что делать, если мне не надо ничего передавать, а только принимать?


 
Сергей М. ©   (2007-05-22 09:38) [7]


> что делать, если мне не надо ничего передавать, а только
> принимать?


Заведи таймер, в его обработчике делай тоже самое что и в обработчике OnRead. Успешный вызов read-метода означает, что соединение "живое", неуспешный - "мертвое".


 
SpellCaster   (2007-05-22 14:46) [8]

"Пингуй" сервак тестовыми пакетами каждые 5 сек, например


 
Nucer   (2007-05-22 15:08) [9]


> Заведи таймер, в его обработчике делай тоже самое что и
> в обработчике OnRead. Успешный вызов read-метода означает,
>  что соединение "живое", неуспешный - "мертвое".

Делал так:
recv(cs.Socket.SocketHandle,pbuf,1,MSG_PEEK);
И так:
cs.Socket.Read(cs.Socket.SocketHandle);
И вот так:
cs.Socket.SendText("");

Никакой реакции. Достаточно отправить хотя бы один байт - cs.Socket.SendText("X") - получаю OnDisconnect.


> "Пингуй" сервак тестовыми пакетами каждые 5 сек, например

Не хотелось бы слать мусор каждые 5 секунд... пусть и один байт... наверняка есть другой выход.


 
DVM ©   (2007-05-22 15:25) [10]


> Не хотелось бы слать мусор каждые 5 секунд... пусть и один
> байт... наверняка есть другой выход.

нету.


 
Nucer   (2007-05-22 15:29) [11]

А что-нибудь типа KeepAlive запроса =)


 
Сергей М. ©   (2007-05-22 15:33) [12]


> наверняка есть другой выход


Других выходов нет и не будет.


> Делал так:
> recv(

С какого перепугу ты взялся за WinsockAPI ?
И если взялся, то где анализ результата. возвращаемого этой функцией ?


> И так:
> cs.Socket.Read


> Никакой реакции


Какую реакцию ты ожидал ?
Ты справку к методу TCustomWinSocket.Read читал, прежде чем ожидать какую-то конкретную реакцию ?


 
SpellCaster   (2007-05-23 13:17) [13]

> [11] Nucer   (22.05.07 15:29)
Это то же самое, что в [8]


 
Сергей М. ©   (2007-05-23 13:44) [14]


> Nucer   (22.05.07 15:29) [11]
>
> А что-нибудь типа KeepAlive запроса =)


Сначала научи сервер понимать такие запросы, тогда его можно и задействовать.



Страницы: 1 вся ветка

Текущий архив: 2008.02.03;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.018 c
2-1200054973
9899100
2008-01-11 15:36
2008.02.03
MDIchild отобразить модально


8-1173067347
musulman
2007-03-05 07:02
2008.02.03
Верстка.


15-1198493736
FreeBSD
2007-12-24 13:55
2008.02.03
Gambas


15-1199175624
vrem_
2008-01-01 11:20
2008.02.03
Подскажите программу размер поменять :)


15-1198718830
koha overload
2007-12-27 04:27
2008.02.03
Оцените идею