В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13 |
Сетевые средства
Опции задаются именованными константами (аргумент option_name ), которые определены в заголовочном файле <sys/socket.h>. Выделим среди них наиболее употребительные и разделим на несколько групп. К первой отнесем опции с целочисленными значениями, описывающими характеристики или состояние сокета.
SO_ERROR
Статус ошибок (после опроса очищается).
SO_TYPE
Тип сокета.
Ко второй группе отнесем булевы опции, представленные целочисленными значениями (0 означает ложь).
SO_DEBUG
Сообщает, записывается ли отладочная информация о работе сокета.
SO_ACCEPTCONN
Указывает, является ли сокет слушающим.
В третью группу включены опции с целочисленными значениями, определяющими количественные характеристики объектов, ассоциированных с сокетом.
SO_SNDBUF
Размер буфера для передаваемых данных (выходного буфера).
SO_RCVBUF
Размер входного буфера.
SO_RCVLOWATM
Минимальное число байт, обрабатываемых при вводе. Подразумеваемое значение равно единице. Большие значения могут вызвать блокировку принимающего процесса до поступления в сокет необходимого объема данных.
SO_SNDLOWAT
Минимальное число байт, обрабатываемых при выводе.
В четвертую группу входят опции со структурными значениями.
SO_LINGER
Определяет, блокировать ли процесс при закрытии дескриптора sd до передачи буферизованных данных, и если блокировать, то на какой срок. Значением опции является структура linger, определенная в заголовочном файле <sys/socket.h> и содержащая, согласно стандарту POSIX-2001, по крайней мере следующие поля.
int l_onoff; /* Признак, включена ли опция блокирования */ /* при закрытии */ int l_linger; /* Длительность блокирования в секундах */
SO_RCVTIMEO
Длительность ожидания поступления данных при вводе. Значение - упомянутая выше структура типа timeval. Подразумевая длительность равна нулю. Если в течение специфицированного промежутка времени новых данных не поступило, операция ввода вернет число байт, меньше запрошенного, или завершится ошибкой EAGAIN.
SO_SNDTIMEO
Длительность ожидания отправки данных при выводе.
Не все из перечисленных опций могут быть переустановлены функцией setsockopt(). Исключение по понятным причинам составляют SO_ERROR, SO_TYPE, SO_ACCEPTCONN.
Аргумент level задает протокольный уровень опции. Уровню сокетов соответствует значение SOL_SOCKET, уровню TCP - IPPROTO_TCP.
Функция getpeername() (см. листинг 11.27), во многом аналогичная рассмотренной выше функции getsockname(), позволяет опросить еще одну характеристику - адрес ( имя ) сокета, с которым установлено соединение.
#include <sys/socket.h> int getpeername (int sd, struct sockaddr *restrict address, socklen_t *restrict address_len);Листинг 11.27. Описание функции getpeername().