|
|
||||||
Реализовать таймаут16.11.2012, 19:47. Показов 8340. Ответов 29
Метки нет (Все метки)
Допустим есть пишем класс обвертку над winsocks.
Как реализовать таймаут соединения. К примеру есть метод класса, при вызове которого должно быть отправлено сообщение на сервер и ожидатся какое то время ответ с него, если нет, то возвращение значения или выбрасывается исключения.
0
|
||||||
| 16.11.2012, 19:47 | |
|
Ответы с готовыми решениями:
29
Таймаут? Синхронные сокеты и таймаут Как организовать таймаут? |
| 17.11.2012, 20:59 | ||||||
|
select проверяет готовность сокета. К соединению или чтению не важно.
1
|
||||||
|
|
||
| 17.11.2012, 21:28 [ТС] | ||
|
Ну так если сначала проверим и сразу читаем, то нормально будет ?
Теоретически ведь соединение может упасть в промежутке между этими действиями- это меня заботит. Или я неправильно понимаю- select говорит о уже принятой информации и готовой к чтению ? IOCP как понимаю для не блокируемого режима Добавлено через 20 минут
Здесь имеется ввиду готовность нашего клиент-сокета или сокет-сервера на той стороне соединения ? Вот что мне непонятно...
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 17.11.2012, 21:49 | |
|
Для блокируемых сокетов иногда бывает проще поставить SO_(RCV|SND)TIMEO
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 17.11.2012, 21:56 | |
|
Посредством setsockopt() выставляем максимальное время ожидания для операций чтения/записи на сокете. Т.е. например recv() будет ждать данных не "вечно" а N секунд.
0
|
|
|
|
||
| 17.11.2012, 22:31 [ТС] | ||
|
Т.е имеется ввиду SO_RCVTIMEO и SO_SNDTIMEO
Как я понимаю в случае таймаута будет возвращено SOCKET_ERROR ?
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 17.11.2012, 22:47 | |
|
Там же все написано...
0
|
|
|
|
|||||||||||||||||||||||||||
| 18.11.2012, 03:10 [ТС] | |||||||||||||||||||||||||||
|
Ну читаю
Или это лишь уровень на котором задается поведение? Добавлено через 7 минут Не туда глянул .... Добавлено через 13 минут Как я понимаю приблизительно так должно выглядеть
В общем теперь пытаюсь реализовать
Если таймауты не устанавливать, когда прием закончен recv возвращает 0. А если установлены - ошибку.
0
|
|||||||||||||||||||||||||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||||
| 18.11.2012, 10:21 | ||||
|
Если Ваша цель pop3 клиент, то лучше начать не с сокетов и тем более таймаутов, а с реализации FSM.
0
|
||||
|
|
||||
| 18.11.2012, 15:48 [ТС] | ||||
|
Или я что-то не понимаю ? recv возвращает 0 только при закрытие соединения ? Добавлено через 6 минут А задача понять как приблизительно может работать Indy. Добавлено через 40 секунд
0
|
||||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|||||||
| 18.11.2012, 16:45 | |||||||
![]() Если Вы о своем коде с зачатками pop3, то смотреть, что именно ответил сервер после каждого успешного recv().
0
|
|||||||
|
|
||
| 18.11.2012, 17:08 [ТС] | ||
|
Ну так, как я узнаю что ответил полностью, а главное что он закончил отвечать? Добавлено через 3 минуты Сервер то может отвечать порциями...
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
||
| 18.11.2012, 17:25 | ||
|
Если _универсальные_ обертки над send/recv это одно и тут как конец приема/передачи можно рассматривать только ошибку или закрытый сокет, Прием/отправку POP3 это другое (не кто не запрещает использовать ф-ции написанные в 1м случае) и тут в дополнение к общему случаю, как конец приема ответа на команду/приветствие сервера нужно рассматривать в контексте конкретной фазы протокола. Например если после успешной авторизации на NOOP сервер Вам ответит, что-то отличное от "+OK...\n" остается только выругаться и разорвать соединение. тоже SMTP - третье, HTPP - четвертое и т.д. и тп.
1
|
||
|
|
||
| 18.11.2012, 17:32 [ТС] | ||
|
Ну теперь более или менее понятно нужно отдельно смотреть по каждому протоколу и по ответу... универсально не получится...
Вот только HTTP не всегда закрывает соединение... Тут по заголовку походу надо определять...
0
|
||
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 18.11.2012, 17:44 | |
|
цитата жжот. Человек просто не понимает о чем пишет... Набор умных и правильных слов, но вместе - полный бред.
0
|
|
|
|
|
| 18.11.2012, 18:00 [ТС] | |
|
Ну б сказал нет однозначности...
Правильно ли я понимаю? 1. Если размер буфера меньше размера "пришедшей информации", то recv вызывается несколько раз. 2. Следовательно надо или четко указывать длину буфера так что бы прием шел в один recv, либо обрабатывать инфу в каждом recv (с анализом заголовка/ответа протокола) ???
0
|
|
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
| 18.11.2012, 18:25 | |
|
Есть задачи когда нужно смотреть куда-то в полученные (возможно раньше) данные, есть где достаточно "не ошибки" в ф-ции передачи... Т.е. это все абстрактные рассуждения ни о чем.
0
|
|
| 18.11.2012, 18:25 | |
|
Помогаю со студенческими работами здесь
20
TCP SO_KEEPALIVE и таймаут на прием Работа с UDP, таймаут для setsockopt Реализовать таймаут PHP pthreads Как реализовать таймаут ожидания интента?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|