Текущий архив: 2007.04.29;
Скачать: CL | DM;
ВнизICS — TWSocket Найти похожие ветки
← →
sfn (2006-11-03 10:48) [0]Использую TWSocket как клиент для реализации собственного протокола. Но возник такой вопрос: я так понимаю, что сам TWSocket не обладает каким либо средством отслеживания таймаута при коннекте (?) поэтому возникает вопрос, как корректнее всего реализовать таймаут?
← →
Сергей М. © (2006-11-03 10:54) [1]
> как корректнее всего реализовать таймаут?
>
Я не в курсе особенностей реализации TWSocket, но если там задействуется неблок.режим с асинхронными нотификациями о событиях транспорта, то задача решается оч просто - с пом. обычного таймера.
← →
Anatoly Podgoretsky © (2006-11-03 13:28) [2]> sfn (03.11.2006 10:48:00) [0]
WinSock сам разруливает.
← →
Сергей М. © (2006-11-03 13:30) [3]
> Anatoly Podgoretsky © (03.11.06 13:28) [2]
Я так понял, что автора не устраивает дифолтное значение - он, понимаешь ли, желает сделать аборт попытке коннекции, ежели она не завершилась в отведенное автором время
← →
Anatoly Podgoretsky © (2006-11-03 13:41) [4]> Сергей М. (03.11.2006 13:30:03) [3]
Таймер/Sleep
← →
sfn (2006-11-03 13:46) [5]Глупый вопрос, но: а что winsock разруливает, какой у него в таком случае таймаут?
← →
Anatoly Podgoretsky © (2006-11-03 14:11) [6]> sfn (03.11.2006 13:46:05) [5]
Не уверен, но вроде порядка 20 секунд, может быть разные на разных
компьютерах.
← →
sfn (2006-11-03 14:24) [7]А какой смысл то вообще не включать в такие классы, как достаточно популярный TWSocket, контроль за таймаутом, ведь таймаут может быть нужен как менее ~20, так и более? Если у меня таймаут будет более ~20 секунд, то TWSocket сам разорвет соединение? А мне например нужен таймаут в 40 секунд...
← →
Сергей М. © (2006-11-03 14:43) [8]
> Если у меня таймаут будет более ~20 секунд, то TWSocket
> сам разорвет соединение?
О каком "разрыве соединения" может идти речь, если оно еще не установлено ?
Подумай ... Головой) ...
Циклограмма (aka машина состояния) TCP-соединения наглядно изложена на book.itep.ru (раздел "Протокол TCP")
← →
sfn (2006-11-03 14:48) [9]
> О каком "разрыве соединения" может идти речь, если оно еще
> не установлено ?
я имел ввиду: разорвет попытку соединения.
← →
Сергей М. © (2006-11-03 15:03) [10]
> sfn (03.11.06 14:48) [9]
>
>
Режим-то какой ? Блокирующий или неблокирующий ? Уточни ..
← →
sfn (2006-11-03 22:37) [11]Вот что я нашел на сайте ICS про таймауты, но к сожалению превратить этот английский текст в дельфийский код не смог.
Implementing a Timeout
Implementing a timeout with async socket is just a matter of testing since how long you haven"t received a read request (OnDataAvailable event) from the remote site, or a write request (OnSendData), or a connect status (OnSessionConnected), or a disconnect status (OnSessionClosed) and so on.
It is easy to implement timeouts at the application level using a simple and single TTimer for all timeouts. The idea is to have a list of timeout structures (to be created). This structure could be the time the last activity happened and a callback (a kind of event) to be called when the timeout occur. Of course each structure has to be updated each time some activity occurs.
When the timer event is triggered, you scan the list to see the items having no activity since a given timeout, and then call their callback. From hte callback you do whatever action is needed, for example closing the connection.
http://wiki.overbyte.be/wiki/index.php/FAQ.Timeout
← →
Сергей М. © (2006-11-04 10:43) [12]
> не смог
Что не понятно ?
← →
sfn (2006-11-04 10:55) [13]С английским не слишком дружу. Ну понял что TTimer использовать советуют, но что там про структуру и таймауты для OnSendData, OnDataAvailable. Я этого не понял. Предлогают создать некую структуру с таймаутами для различных операция и по срабатыванию таймера проверять данные этой структуры. Но не понимаю, зачем там упоминается OnSendData, OnDataAvailable...
← →
Anatoly Podgoretsky © (2006-11-04 11:25) [14]Ни причем, у тебя вопрос другой.
← →
Anatoly Podgoretsky © (2006-11-04 11:29) [15]Сергей М. © (03.11.06 13:30) [3]
Вернусь обратно к твоему предположению, при ассинхронном режиме работы ни к чему, по окончанию будет выработано одно из двух событий и это никак не мешает работе программы и не тормозит ее.
А вот если надо продлить, то тогда таймер и счетчик. И далее как выше.
Вроде бы таймауты в Winsock глобальны для всей системы и поэтому их недопустимо изменять из пользовательской программы.
← →
Anatoly Podgoretsky © (2006-11-04 11:31) [16]
> Глупый вопрос, но: а что winsock разруливает, какой у него
> в таком случае таймаут?
Еще раз по данному вопросу, таймауты они разные, зависит от ответа сервера, 20 секунд если не поступит ответ от сервера.
И тогда второй вопрос, а что такое коннект, оно различается от контекста?
Может ответ на этот вопрос даст прояснение.
← →
Anatoly Podgoretsky © (2006-11-04 11:33) [17]Приведеная статья очень четко отвечает на вопросы, а поскольку вопросы еще есть, то видимо от непонимания принципов работы сетей, сокет подсистемы и ICS
Страницы: 1 вся ветка
Текущий архив: 2007.04.29;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.042 c