powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Установить таймаут сокета
18 сообщений из 18, страница 1 из 1
Установить таймаут сокета
    #40005718
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть набор клиентских асинхронных сокетов. Нужно закрывать сокет, если по нем не было активности в течение определенного времени.

Можно это реализовать средствами самого WinSock? Или нужно к каждому сокету создавать свой WaitableTimer?


С уважением, Vasilisk
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40005728
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это зависит от того как у тебя реализована "асинхронность" сокетов. В наихудшем случае
одного таймера на все должно быть достаточно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40005730
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
как у тебя реализована "асинхронность" сокетов
Набор WSACreateEvent и один WaitForMultipleObjects
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40005735
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_один WaitForMultipleObjects

Тогда и таймер тебе не нужен. Просто когда в этом же цикле пробегаешь по списку объектов,
ища сработавший - пристреливай неактивные сокеты. Особая точность там не нужна.

Ну и таймаут в WaitForMultipleObjects поставить чтобы не тормозить при абсолютно полной
неактивности.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40005936
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Тогда и таймер тебе не нужен.
Таки придется программировать.

Спасибо
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40005937
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Таки придется программировать.

Кстати, ты же в курсе, что WaitForMultileObjects ограничен 64-мя объектами и для поддержки
большего числа подключений придётся им назначать один и тот же ивент?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40005950
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
Кстати, ты же в курсе, что WaitForMultileObjects ограничен 64-мя объектами
Да
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006020
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_,

а что просто не вести кучку остатков(Binary heap), это дешевле и быстрее, чем WaitForMultipleObjects
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006079
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)а что просто не вести кучку остатков(Binary heap)

Что за "куча остатков", позволяющая ожидать приёма данных из 100500 сокетов?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006167
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ему что надо?
"Установить таймаут сокета"

в чём проблема ждать ровно столько сколько нужно что бы решить что нужно что-то грохнуть?
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006174
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)в чём проблема ждать ровно столько сколько нужно что бы решить что нужно что-то грохнуть?

В том, что ждать по-любому придётся главное событие (приход данных из сокета), а отстрел
неактивных это побочка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006322
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

ну вот сразу это и делать, зачем лишние побочки
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006329
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)ну вот сразу это и делать

Сразу делать что? Уменьшать остатки в целой куче при каждом принятом пакете?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006386
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

kealon(Ruslan)ну вот сразу это и делать

Сразу делать что? Уменьшать остатки в целой куче при каждом принятом пакете?
зачем у всей кучи?
всё просто
у того сокета, по которому пришли данные, выставляется время следующей проверки и меняется его положение в куче
на вершине кучи у тебя кандидат на вылет
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006585
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)
у того сокета, по которому пришли данные, выставляется время следующей проверки и меняется его положение в куче на вершине кучи у тебя кандидат на вылет
Красивый алгоритм. Только какое отношение оно имеет к
kealon(Ruslan)
а что просто не вести кучку остатков(Binary heap), это дешевле и быстрее, чем WaitForMultipleObjects
?

Все таки основная цель ждать события от сокетов, а не пристреливать их по таймауту
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006588
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_
kealon(Ruslan)
у того сокета, по которому пришли данные, выставляется время следующей проверки и меняется его положение в куче на вершине кучи у тебя кандидат на вылет
Красивый алгоритм. Только какое отношение оно имеет к
kealon(Ruslan)
а что просто не вести кучку остатков(Binary heap), это дешевле и быстрее, чем WaitForMultipleObjects
?

Все таки основная цель ждать события от сокетов, а не пристреливать их по таймауту
1. Binary heap === бинарная куча
2 у автора надо спросить, но он вроде однозначен
_Vasilisk_Установить таймаут сокета
идея простая: вместо горождения лишних ивентов, "вызвать Select" с конкретным таймаутом
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006590
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)идея простая: вместо горождения лишних ивентов, "вызвать Select" с конкретным таймаутом

С одной стороны это, конечно, сильно соптимизирует поиск кандидата на отстрел. С другой -
придётся держать дополнительную структуру, которую придётся сканировать при штатном
дисконнекте, например. Неоднозначненько. Попахивает преждевременной оптимизацией.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Установить таймаут сокета
    #40006592
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

на обычно как бы штатный дисконнект в том же Select и выдаётся, а формально разницы закрылся ли он или просто "пропал" - нет

я уж молчу, что поддержка такой простой структуры явно не дороже, чем событие на каждый сокет за которым ещё и следить надо
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Установить таймаут сокета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]