14.2. Тайм-ауты сокета

14.2. Тайм-ауты сокета

Существует три способа установки тайм-аута для операции ввода-вывода через сокет.

1. Вызов функции alarm, которая генерирует сигнал SIGALRM, когда истекает заданное время. Это подразумевает обработку сигналов, которая может варьироваться от одной реализации к другой. К тому же такой подход может стать помехой другим существующим вызовам функции alarm в данном процессе.

2. Блокирование при ожидании ввода-вывода в функции select, имеющей встроенное ограничение времени, вместо блокирования в вызове функции read или write.

3. Использование более новых параметров сокета — SO_RCVTIMEO и SO_SNDTIMEO. Проблема при использовании этого подхода заключается в том, что не все реализации поддерживают новые параметры сокетов.

Все три технологии работают с функциями ввода и вывода (такими как read, write и их вариациями, например recvfrom и sendto), но нам также хотелось бы иметь технологию, работающую с функцией connect, поскольку процесс соединения TCP может занять длительное время (обычно 75 с). Функцию select можно использовать для установки тайм-аута функции connect, только когда сокет находится в неблокируемом режиме (который мы рассматриваем в разделе 16.3), а параметры сокетов, устанавливающие тайм-аут, не работают с функцией connect. Мы также должны отметить, что первые две технологии работают с любым дескриптором, в то время как третья технология только с дескрипторами сокетов.

Теперь мы представим примеры применения всех трех технологий.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

8.3.2 Внутренние системные тайм-ауты

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

8.3.2 Внутренние системные тайм-ауты Некоторым из процедур ядра, в частности драйверам устройств и сетевым протоколам, требуется вызов функций ядра в режиме реального времени. Например, процесс может перевести терминал в режим ввода без обработки символов, при котором


16.5. Тайм-аут и повторная передача

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

16.5. Тайм-аут и повторная передача Рассмотрим стратегию обработки тайм-аутов и повторной передачи, используемую в средствах Sun RPC. Существуют два значения тайм-аутов:1. Общий тайм-аут определяет время ожидания ответа сервера клиентом. Это значение используется протоколами


6.14.5 Тайм-аут сборки датаграммы

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

6.14.5 Тайм-аут сборки датаграммы Рассмотрим следующую последовательность событий:? Пересылается датаграмма.? Пославший ее процесс аварийно завершается.? Датаграмма фрагментируется при пересылке.? По пути следования теряется один из фрагментов.При потере отправленного


10.11.1 Тайм-аут

Из книги Тайм-менеджмент для системных администраторов автора Лимончелли Томас

10.11.1 Тайм-аут Работа партнера по соединению может завершиться крахом либо полностью прерваться вследствие неисправности шлюза или связи. Чтобы предотвратить повторную пересылку данных в TCP, существует несколько механизмов.Достигнув первого порогового значения для


10.13.5 Тайм-аут повторной пересылки

Из книги Программирование на языке Ruby [Идеология языка, теория и практика применения] автора Фултон Хэл

10.13.5 Тайм-аут повторной пересылки После отправки сегмента TCP устанавливает таймер и отслеживает поступление ACK. Если ACK не получен в течение периода тайм-аута, TCP выполняет повторную пересылку сегмента (ретрансляцию). Однако каким должен быть период тайм-аута?Если он


1 Принципы тайм-менеджмента

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб

1 Принципы тайм-менеджмента Погодите! Прежде чем начать, давайте кое-что сделаем для уверенности, что мы действительно закончим.Я прекрасно понимаю, что вы как системный администратор постоянно подвергаетесь прерываниям. То телефон зазвонит, то клиент[1] обратится с


Трудности тайм-менеджмента

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

Трудности тайм-менеджмента Вот теперь можно начинать!Тайм-менеджмент труден для сисадминов в первую очередь потому, что нашу работу постоянно прерывают. Как довести дело до конца, если нам все время приходится бросать его, чтобы устранить проблему или ответить на вопрос,


Принципы тайм-менеджмента для системных администраторов

Из книги автора

Принципы тайм-менеджмента для системных администраторов Есть шесть принципов, на которых я основываю все свои приемы тайм-менеджмента. Не утверждаю, что какой-либо из них открыт мною, но я определенно причастен к их развитию. Вы легко проследите эти принципы на


Тайм-ауты ядра

Из книги автора

Тайм-ауты ядра QNX/Neutrino позволяет вам получать тайм-ауты по всем блокированным состояниям. Мы обсуждали эти состояния в главе «Процессы и потоки» в разделе «Состояния потоков». Наиболее часто у вас может возникнуть потребность в этом при обмене сообщениями: клиент,


Тайм-ауты ядра и функция pthread_join()

Из книги автора

Тайм-ауты ядра и функция pthread_join() Самый простой пример для рассмотрения — это использование тайм-аута с функцией pthread_join(). Вот как это можно было бы сделать:/* * tt1.c*/#include <stdio.h>#include <pthread.h>#include <inttypes.h>#include <errno.h>#include <sys/neutrino.h>#define SEC_NSEC 1000000000LL // В одной


Тайм-аут для функции connect (сигнал SIGALRM)

Из книги автора

Тайм-аут для функции connect (сигнал SIGALRM) В листинге 14.1[1] показана наша функция connect_timeo, вызывающая функцию connect с ограничением по времени, заданным вызывающим процессом. Первые три аргумента — это аргументы, которых требует функция connect, а четвертый — это длительность


Тайм-аут для функции recvfrom (сигнал SIGALRM)

Из книги автора

Тайм-аут для функции recvfrom (сигнал SIGALRM) В листинге 14.2 показана новая версия функции dg_cli, приведенной в листинге 8.4, в которую добавлен вызов функции alarm для прерывания функции recvfrom при отсутствии ответа в течение 5 с.Листинг 14.2. Функция dg_cli, в которой при установке тайм-аута


Тайм-аут для функции recvfrom (функция select)

Из книги автора

Тайм-аут для функции recvfrom (функция select) Мы демонстрируем вторую технологию для установки тайм-аута (использование функции select) в листинге 14.3. Здесь показана наша функция readable_timeo, которая ждет, когда дескриптор станет готов для чтения, но не более заданного числа


Тайм-аут для функции recvfrom (параметр сокета SO_RCVTIMEO)

Из книги автора

Тайм-аут для функции recvfrom (параметр сокета SO_RCVTIMEO) В нашем последнем примере демонстрируется применение параметра сокета SO_RCVTIMEO. Мы устанавливаем этот параметр один раз для дескриптора, задавая значение тайм-аута, и этот тайм-аут затем применяется ко всем операциям