Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Установить таймаут сокета / 18 сообщений из 18, страница 1 из 1
06.10.2020, 14:06
    #40005718
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Установить таймаут сокета
Есть набор клиентских асинхронных сокетов. Нужно закрывать сокет, если по нем не было активности в течение определенного времени.

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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