![]() ![]() |
||||||
1 | ||||||
Реализовать таймаут16.11.2012, 19:47. Показов 8005. Ответов 29
Метки нет Все метки)
(
Допустим есть пишем класс обвертку над winsocks.
Как реализовать таймаут соединения. К примеру есть метод класса, при вызове которого должно быть отправлено сообщение на сервер и ожидатся какое то время ответ с него, если нет, то возвращение значения или выбрасывается исключения.
0
|
16.11.2012, 19:47 | |
Ответы с готовыми решениями:
29
Таймаут? Синхронные сокеты и таймаут Как организовать таймаут? |
17.11.2012, 20:59 | 4 | |||||
select проверяет готовность сокета. К соединению или чтению не важно.
1
|
![]() ![]() |
|
17.11.2012, 21:28 [ТС] | 5 |
Ну так если сначала проверим и сразу читаем, то нормально будет ?
Теоретически ведь соединение может упасть в промежутке между этими действиями- это меня заботит. Или я неправильно понимаю- select говорит о уже принятой информации и готовой к чтению ? IOCP как понимаю для не блокируемого режима Добавлено через 20 минут Здесь имеется ввиду готовность нашего клиент-сокета или сокет-сервера на той стороне соединения ? Вот что мне непонятно...
0
|
![]() ![]() |
|
17.11.2012, 22:31 [ТС] | 9 |
Т.е имеется ввиду SO_RCVTIMEO и SO_SNDTIMEO
Как я понимаю в случае таймаута будет возвращено SOCKET_ERROR ?
0
|
![]() ![]() |
||||||||||||||||||||||||||
18.11.2012, 03:10 [ТС] | 11 | |||||||||||||||||||||||||
Ну читаю
Или это лишь уровень на котором задается поведение? Добавлено через 7 минут Не туда глянул .... Добавлено через 13 минут Как я понимаю приблизительно так должно выглядеть
В общем теперь пытаюсь реализовать
Если таймауты не устанавливать, когда прием закончен recv возвращает 0. А если установлены - ошибку.
0
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
18.11.2012, 10:21 | 12 |
Честно говоря я не уверен, что в Виндах есть какой-то смысл в этих опциях для listen сокета.
Точно так же, ничего не поменялось. Можете сказать серверу quit и убедиться, что после "+ok" recv вернет вам 0. Просто таймаут случается раньше чем сервер закрывает сокет. Если Ваша цель pop3 клиент, то лучше начать не с сокетов и тем более таймаутов, а с реализации FSM.
0
|
![]() ![]() |
|
18.11.2012, 15:48 [ТС] | 13 |
Оуу какой закрывать ? Я ему не говорил закрывать соединение...
Или я что-то не понимаю ? recv возвращает 0 только при закрытие соединения ? Добавлено через 6 минут Не уверен в том что вы понимаете под FSM, то логичнее начинать снизу вверх а не на оборот. А задача понять как приблизительно может работать Indy. Добавлено через 40 секунд
0
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
18.11.2012, 16:45 | 14 |
Ну вот захотел и закрыл, Ваше "я не говорил" удаленной стороне вообщем случае по барабану... что хочет то и делает
![]() Похоже да. Для SOCK_STREAM есть еще вариант recv(,,0,) при котором некоторые системы (например оригинальный BSD стэк) возвращают 0, но это не Ваш случай. Машина состояний протокола. Угу, заметно. Где тут? Я совершенно без понятия, кто такой/ая Ваша Indy... Если Вы о своем коде с зачатками pop3, то смотреть, что именно ответил сервер после каждого успешного recv().
0
|
![]() ![]() |
|
18.11.2012, 17:08 [ТС] | 15 |
POP3 лишь пример обмена командами.
Ну так, как я узнаю что ответил полностью, а главное что он закончил отвечать? Добавлено через 3 минуты Сервер то может отвечать порциями...
0
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
18.11.2012, 17:25 | 16 |
Дык... Вы определитесь, _что_ именно Вы делаете...
Если _универсальные_ обертки над send/recv это одно и тут как конец приема/передачи можно рассматривать только ошибку или закрытый сокет, Прием/отправку POP3 это другое (не кто не запрещает использовать ф-ции написанные в 1м случае) и тут в дополнение к общему случаю, как конец приема ответа на команду/приветствие сервера нужно рассматривать в контексте конкретной фазы протокола. Например если после успешной авторизации на NOOP сервер Вам ответит, что-то отличное от "+OK...\n" остается только выругаться и разорвать соединение. тоже SMTP - третье, HTPP - четвертое и т.д. и тп.
1
|
![]() ![]() |
|
18.11.2012, 17:32 [ТС] | 17 |
Ну теперь более или менее понятно нужно отдельно смотреть по каждому протоколу и по ответу... универсально не получится...
Вот только HTTP не всегда закрывает соединение... Тут по заголовку походу надо определять...
0
|
![]() ![]() |
|
18.11.2012, 18:00 [ТС] | 19 |
Ну б сказал нет однозначности...
Правильно ли я понимаю? 1. Если размер буфера меньше размера "пришедшей информации", то recv вызывается несколько раз. 2. Следовательно надо или четко указывать длину буфера так что бы прием шел в один recv, либо обрабатывать инфу в каждом recv (с анализом заголовка/ответа протокола) ???
0
|
1259 / 650 / 44
Регистрация: 06.02.2011
Сообщений: 1,654
|
|
18.11.2012, 18:25 | 20 |
Есть задачи когда нужно смотреть куда-то в полученные (возможно раньше) данные, есть где достаточно "не ошибки" в ф-ции передачи... Т.е. это все абстрактные рассуждения ни о чем.
0
|
18.11.2012, 18:25 | |
Помогаю со студенческими работами здесь
20
TCP SO_KEEPALIVE и таймаут на прием Работа с UDP, таймаут для setsockopt Реализовать таймаут PHP pthreads Как реализовать таймаут ожидания интента?
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
![]() |
Новые блоги и статьи
![]() |
||||
Вопросы на собеседовании по Android
mobDevWorks 14.03.2025
По данным статистики, Android занимает более 70% мирового рынка мобильных операционных систем, что делает платформу привлекательной как для начинающих разработчиков, так и для опытных профессионалов. . . .
|
Лучшие игровые движки для Python
py-thonny 14.03.2025
Python обеспечивает разработчиков игр мощными движками и фреймворками, которые позволяют воплотить практически любую идею — от простой аркады до визуального романа с разветвленным сюжетом. Главное. . .
|
Бессерверный JavaScript: Разработка масштабируемых API с AWS Lambda
run.dev 14.03.2025
Но что такое бессерверные вычисления на самом деле? По сути, это модель облачных вычислений, где разработчик фокусируется исключительно на создании бизнес-логики, не тратя время на настройку. . .
|
Безопасность кода в C++26: Менеджеры ресурсов и висячие ссылки
NullReferenced 14.03.2025
C++ всегда был языком, предоставляющим разработчикам большие возможности и гибкость, но вместе с тем требующим ответственности. Одной из самых коварных проблем даже для опытных программистов остаются. . .
|
smart-agent proper interface settings (2025)
jigi33 14.03.2025
Smart-agent proper interface settings (mart 2025).
(see screenshots to look at "Etalon" ARM)
|
Продвинутые настройки JVM
Javaican 14.03.2025
Стандартные параметры запуска JVM хороши для повседневной разработки, но совершенно недостаточны для высоконагруженных систем. Представьте, что вы запускаете финансовую платформу, обрабатывающую. . .
|
CI/CD для приложений Java с Azure DevOps и Docker
Mr. Docker 14.03.2025
Разработка современных Java-приложений немыслима без системы непрерывной интеграции и доставки (CI/ CD). Azure DevOps в сочетании с Docker предоставляет мощный инструментарий для создания таких. . .
|
Разработка на PHP и интернет вещей (IoT)
Jason-Webb 14.03.2025
Интернет вещей (IoT) произвел настоящую революцию в способах взаимодействия устройств с окружающим миром. В эпоху, когда холодильники сами заказывают молоко, а термостаты учатся вашим привычкам,. . .
|
Node.js 20: Новые возможности и улучшения производительности
Reangularity 14.03.2025
Что же принёс нам релиз Node. js 20? В первую очередь, это существенные улучшения в производительности. Движок V8 получил серьёзные оптимизации, благодаря чему JavaScript-код выполняется заметно. . .
|
Безопасность кластеров Apache Kafka
Javaican 14.03.2025
Apache Kafka стал одним из ключевых компонентов современных архитектур, обрабатывающих потоки данных в режиме реального времени. Его используют тысячи компаний от стартапов до технологических. . .
|