Книга: UNIX: разработка сетевых приложений
Параметр сокета SO_ERROR
Параметр сокета SO_ERROR
Когда на сокете происходит ошибка, модуль протокола в ядре, происходящем от Беркли, присваивает переменной so_error
для этого сокета одно из стандартных значений Unix Exxx
. Это так называемая ошибка, требующая обработки (pending error) для данного сокета. Процесс может быть немедленно оповещен об ошибке одним из двух способов:
1. Если процесс блокируется в вызове функции select
(см. раздел 6.3), ожидая готовности данного сокета к чтению или записи, функция select
возвращает управление и уведомляет процесс о соответствующем состоянии готовности.
2. Если процесс использует управляемый сигналом ввод-вывод (см. главу 25), для него или для группы таких процессов генерируется сигнал SIGIO
.
Процесс может получить значение переменной so_error
, указав параметр сокета SO_ERROR
. Целое значение, возвращаемое функцией getsockopt
, является кодом ошибки, требующей обработки. Затем значение переменной so_error
сбрасывается ядром в 0 [128, с. 547].
Если процесс вызывает функцию read
и возвращаемых данных нет, а значение so_error
ненулевое, то функция read
возвращает -1 с errno
, которой присвоено значение переменной so_error
[128, с. 516]. Это значение so_error
затем сбрасывается в 0. Если в очереди для сокета есть данные, эти данные возвращаются функцией read
вместо кода ошибки. Если значение so_error
ненулевое, то при вызове процессом функции write
возвращается -1 с errno
, равной значению переменной so_error
[128, с. 495], а значение so_error
сбрасывается в 0.
ПРИМЕЧАНИЕ
В коде, показанном на с. 495 [128], есть ошибка: so_error не сбрасывается в 0. Она была выявлена в реализации BSD/OS. Всегда, когда для сокета возвращается ошибка, требующая обработки, so_error должна быть сброшена в 0.
Здесь вы впервые встречаетесь с параметром сокета, который можно получить, но нельзя установить.
- Параметр сокета SO_BROADCAST
- Параметр сокета SO_DEBUG
- Параметр сокета SO_DONTROUTE
- Параметр сокета SO_ERROR
- Параметр сокета SO_KEEPALIVE
- Параметр сокета SO_LINGER
- Параметр сокета SO_OOBINLINE
- Параметры сокета SO_RCVBUF и SO_SNDBUF
- Параметры сокета SO_RCVLOWAT и SO_SNDLOWAT
- Параметры сокета SO_RCVTIMEO и SO_SNDTIMEO
- Параметры сокета SO_REUSEADDR и SO_REUSEPORT
- Параметр сокета SO_TYPE
- Параметр сокета SO_USELOOPBACK
- Параметр сокета SO_OOBINLINE
- 7.5. Общие параметры сокетов
- Параметр сокета SO_USELOOPBACK
- Параметр сокета SCTP_EVENTS
- Параметр сокета SO_DEBUG
- Параметр сокета SO_TYPE
- Основные параметры ЭЛТ-мониторов
- Безопасность внешних таблиц. Параметр EXTERNAL FILE DIRECTORY
- Единое имя файла параметров InterBase
- Параметры конфигурационного файла InterBase
- Параметры в ibconfig
- Показания к изменению параметра