Опубликован: 15.06.2004 | Доступ: свободный | Студентов: 2557 / 712 | Оценка: 4.35 / 3.96 | Длительность: 27:47:00
ISBN: 978-5-9556-0011-6
Лекция 11:

Сетевые средства

Опции задаются именованными константами (аргумент 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().
Антон Коновалов
Антон Коновалов

В настоящее время актуальный стандарт - это POSIX 2008 и его дополнение POSIX 1003.13
Планируется ли актуализация материалов данного очень полезного курса?