Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.04.29;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
2-1176254877
Riply
2007-04-11 05:27
2007.04.29
Добавление элемента в отсортированную структуру.


2-1175802409
jimmo
2007-04-05 23:46
2007.04.29
Структура базы данных для учета аппаратуры в ремонте


2-1175706272
Igor_w
2007-04-04 21:04
2007.04.29
Нужно организовать телефонный справочник


4-1165068114
leonidus
2006-12-02 17:01
2007.04.29
Некорректное извлечение иконки из ресурса


2-1176104753
Alex_C
2007-04-09 11:45
2007.04.29
Почему HWND_BROADCAST сообщение приходит 2 раза?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский