IOlib

Материал из wiki.lissyara.su
Перейти к: навигация, поиск

IOlib - это более лучшая и более новая библиотека Ввода/Вывода по сравнению со стандартной библиотекой Common Lisp. Она поддерживает: библиотеку сокетов, работу с DNS, мультиплексер ввода/вывода (с наличием select(2), epoll(4) и kqueue(2)), библиотеку путей и утилиты файловой системы.

Доступ к этому программному обеспечению описывается данным соглашением. Это программное обеспечение является бесплатным, любое лицо может получить копию этого программного обеспечения, сопутствующую документацию и использовать его без всяких ограничений. Это программное обеспечение разрешается копировать, модифицировать, совмещать с другим программным обеспечением, публиковать, распространять, перелицензировать и/или продавать копии данного программного обеспечения с условием соблюдения следующих условий:

Уведомление о правообладании и уведомления о регулировании доступа должны включаться во все полные или частичные копии данного программного обеспечения.

Это программное обеспечение поставляется “как есть”, без каких-либо явных или подразумеваемях гарантий, включая, но не ограничиваясь гарантиями программного обеспечения, используемого по назначению и без нарушения целостности лицензируемого объекта. Авторы и правообладатели не несут никакой ответственности за прямые или косвенные убытки связанные с использованием данного программного обеспечения.

Классы сокетов

— Класс: sockets:socket

Список классовых приоритетов: socket, dual-channel-single-fd-mixin, dual-channel-fd-mixin, standard-object, t
Базовый класс для сокетов.

— Класс: sockets:stream-socket

Список классовых приоритетов: stream-socket, socket, dual-channel-single-fd-mixin, dual-channel-fd-mixin, standard-object, t
Смешанные сокеты для типа SOCK_STREAM.

— Класс: sockets:datagram-socket

Список классовых приоритетов: datagram-socket, socket, dual-channel-single-fd-mixin, dual-channel-fd-mixin, standard-object, t
Смешанные сокеты для типа SOCK_DGRAM.

— Класс: sockets:internet-socket

Список классовых приоритетов: internet-socket, socket, dual-channel-single-fd-mixin, dual-channel-fd-mixin, standard-object, t
Смешанные сокеты доменов AF_INET или AF_INET6.

— Класс: sockets:local-socket

Список классовых приоритетов: local-socket, socket, dual-channel-single-fd-mixin, dual-channel-fd-mixin, standard-object, t
Смешанные сокеты домена AF_LOCAL.

— Класс: sockets:active-socket

Список классовых приоритетов: active-socket, socket, dual-channel-single-fd-mixin, dual-channel-gray-stream, trivial-gray-stream-mixin, dual-channel-fd-mixin, fundamental-binary-input-stream, fundamental-binary-output-stream, fundamental-character-input-stream, fundamental-input-stream, fundamental-character-output-stream, fundamental-output-stream, fundamental-character-stream, fundamental-binary-stream, fundamental-stream, standard-object, stream, t
Смешанный класс для активных (клиентских) сокетов.

— Класс: sockets:passive-socket

Список классовых приоритетов: passive-socket, socket, dual-channel-single-fd-mixin, dual-channel-fd-mixin, standard-object, t
Смешанный класс для PASSIVE(сервер) сокетов.

— Класс: sockets:socket-stream-internet-active

Список классовых приоритетов: socket-stream-internet-active, active-socket, stream-socket, internet-socket, socket, dual-channel-single-fd-mixin, dual-channel-gray-stream, trivial-gray-stream-mixin, dual-channel-fd-mixin, fundamental-binary-input-stream, fundamental-binary-output-stream, fundamental-character-input-stream, fundamental-input-stream, fundamental-character-output-stream, fundamental-output-stream, fundamental-character-stream, fundamental-binary-stream, fundamental-stream, standard-object, stream, t
Класс представляет активные сокеты для типов SOCK_STREAM и доменов AF_INET или AF_INET6.

— Класс: sockets:socket-stream-internet-passive

Список классовых приоритетов: socket-stream-internet-passive, passive-socket, stream-socket, internet-socket, socket, dual-channel-single-fd-mixin, dual-channel-fd-mixin, standard-object, t
Класс представляет пассивные сокеты для типов SOCK_STREAM и доменов AF_INET или AF_INET6.

— Класс: sockets:socket-stream-local-active

Список классовых приоритетов: socket-stream-local-active, active-socket, stream-socket, local-socket, socket, dual-channel-single-fd-mixin, dual-channel-gray-stream, trivial-gray-stream-mixin, dual-channel-fd-mixin, fundamental-binary-input-stream, fundamental-binary-output-stream, fundamental-character-input-stream, fundamental-input-stream, fundamental-character-output-stream, fundamental-output-stream, fundamental-character-stream, fundamental-binary-stream, fundamental-stream, standard-object, stream, t
Класс представляет активные сокеты для типа SOCK_STREAM и домена AF_LOCAL.

— Класс: sockets:socket-stream-local-passive

Список классовых приоритетов: socket-stream-local-passive, passive-socket, stream-socket, local-socket, socket, dual-channel-single-fd-mixin, dual-channel-fd-mixin, standard-object, t
Класс представляет пассивные сокеты для типов SOCK_STREAM и домена AF_LOCAL.

— Класс: sockets:socket-datagram-internet-active

Список классовых приоритетов: socket-datagram-internet-active, active-socket, datagram-socket, internet-socket, socket, dual-channel-single-fd-mixin, dual-channel-gray-stream, trivial-gray-stream-mixin, dual-channel-fd-mixin, fundamental-binary-input-stream, fundamental-binary-output-stream, fundamental-character-input-stream, fundamental-input-stream, fundamental-character-output-stream, fundamental-output-stream, fundamental-character-stream, fundamental-binary-stream, fundamental-stream, standard-object, stream, t
Класс представляет активные сокеты для типа SOCK_DGRAM и доменов AF_INET или AF_INET6.

— Класс: sockets:socket-datagram-local-active

Список классовых приоритетов: socket-datagram-local-active, active-socket, datagram-socket, local-socket, socket, dual-channel-single-fd-mixin, dual-channel-gray-stream, trivial-gray-stream-mixin, dual-channel-fd-mixin, fundamental-binary-input-stream, fundamental-binary-output-stream, fundamental-character-input-stream, fundamental-input-stream, fundamental-character-output-stream, fundamental-output-stream, fundamental-character-stream, fundamental-binary-stream, fundamental-stream, standard-object, stream, t
Класс представляет активные сокеты для типа SOCK_DGRAM и домена AF_LOCAL.

Операторы сокетов и макросы

— Общая Фукнция: sockets:make-socket &key address-family type connect ipv6 external-format address-family type connect ipv6 external-format &allow-other-keys

Создаёт экземпляр подкласса socket. Для определения сокета используются аргументы address-family, type, connect и IPV6.
  • address-family - :internet или :local (или :file в виде синонима)
  • type - :stream или :datagram
  • connect - :active или :passive
  • IPV6 - если установлен в nil, создаётся IPv4 сокет, в противном случае, будет создаваться IPv6 сокет.
Для инициализации сокета, в зависимости от address-family, type и connect можно использовать следующие аргументы:
  •  :local-host - обозначает имя хоста или устанавливается в nil. Используется в случае не-null сокета связанного с данным адресом.
  •  :local-port - обозначение порта или nil. В случае если значение local-host не установлено в null, сокет связывается с этим портом. Если local-port установлен в nil, выбирается случайный порт.
  •  :remote-host - обозначение имени хоста или nil. Если не установлен в null, сокет подключается к этому адресу.
  •  :remote-port - обозначение порта. Если remote-host установлен в не null, то производится подключение сокета к этому порту.
  •  :local-filename - строка или nil. Если значение не равно null, то сокет привязывается к этому файлу.
  •  :remote-filename - строка или nil. Если значение не равно null, то сокет подключается к этому файлу.
  •  :backlog - положительное целочисленное или nil. Определяет длину очереди входящего подключения и не может быть больше чем +max-backlog-size+. Если установлено в nil, то устанавливается в значение по умолчанию равное *default-backlog-size*.
  •  :reuse-address: бинарное значение (по умолчанию установлено в T). Настройте переменную SO_REUSEADDR если значение local-host не установлено в null.
  •  :keepalive - бинарное значение. Настройте переменную SO_KEEPALIVE.
  •  :nodelay - бинарное значение. Настройте переменную SO_NODELAY.
  •  :interface - строка. Устанавливает значение SO_BINDTODEVICE для этого интерфейса.
  •  :input-buffer-size - положительное целочисленное значение. Создаёт буфер соответствующего размера для входящего потока.
  •  :output-buffer-size - положительное целочисленное значение. Создаёт буфер соответствующего размера для исходящего потока.
Термины
  • hostname: экземпляр интернет - адреса или другого объекта полченного через lookup-host. IPV6 передаётся функции lookup-host как есть.
  • port: любой объект полученный с помощью lookup-service
:address-family :internet :type :stream :connect :active
Доступные аргументы: :local-host, :local-port, :remote-host, :remote-port, :reuse-address, :keepalive, :nodelay, :input-buffer-size и :output-buffer-size
:address-family :internet :type :stream :connect :passive
Доступные аргументы:: :local-host, :local-port, :backlog, :reuse-address, :interface и :nodelay
:address-family :internet :type :stream :connect :active
Доступные аргументы: :local-filename, :remote-filename, :input-buffer-size и :output-buffer-size
:address-family :internet :type :stream :connect :passive
Доступные аргументы: :local-filename, :remote-filename, :backlog и :reuse-address
:address-family :internet :type :datagram
Доступные аргументы: :local-host, :local-port, :remote-host, :remote-port, :reuse-address, :interface и :broadcast
:address-family :local :type :datagram
Доступные аргументы: :local-filename и :remote-filename

— Макрос: sockets:with-open-socket (var &rest args) &body body

Связывает var с сокетом, созданным с помощью функции make-socket (исполняемый код body, в виде неявной программы) и аргументами args. При выходе, сокет автоматически закрывается.

— Общая Функция: sockets:make-socket-from-fd fd &key connect external-format input-buffer-size output-buffer-size connect external-format

Создаёт экземпляр сокета с соответствующим подклассом socket через fd. Необходимо указать тип соединения сокета - :active или :passive. Семейство адреса и тип сокета определяются автоматически с помощью функций операционной системы. Кроме того, можно определить размер буфера с помощью функций input-buffer-size и output-buffer-size.

— Общая Функция: sockets:make-socket-pair &key type protocol external-format input-buffer-size output-buffer-size type protocol external-format

Создаёт пару сокетов подключённых друг к другу. Тип сокета должен быть либо :stream, либо :datagram. Этим способом, в данный момент, операционные системы могут создать только :local сокеты. Размеры буфера для новых сокетов можно определять с помощью input-buffer-size и output-buffer-size.

— Общая Функция: sockets:send-to socket buffer &rest args &key start end remote-filename flags remote-host remote-port ipv6 &allow-other-keys

Отправляет содержимое буфера buffer в сокет socket. Буфер buffer должен быть вектором в виде (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (*)). buffer must be a vector that can be coerced to a (SIMPLE-ARRAY (UNSIGNED-BYTE 8) (*)). Аргументы start и end - это ограничивающие индексы для буфера buffer. Аргументы remote-host, remote-port и remote-filename используются в качестве пункта назначения данных для сокетов с отключёнными датаграммами.
Ниже перечислены некоторые флаги, которые можно передавать в sendto(2):
  • :out-of-band используется для передачи данных из-группы - актуально только для сокетов потока
  • :dont-wait помечает текущий вызов не-блокируемым
  • :dont-route для непосредственной отправки данных хостам, прямо подключённым к сети, без использования шлюзов
  • :confirm для отображения состояния в слой связи - доступно только для Linux и только для сокетов датаграмм
  • :more - для уведомления ядра о наличии данных для отправки - доступно только для Linux
Возвращает число отправленных байтов.

— Общая Функция: sockets:receive-from socket &rest args &key flags end start buffer size &allow-other-keys

Приём данных с сокета. Если для буфера buffer определены ограничивающие индексы start и end. В этом случае буфер buffer должен быть массивом и тип-элементов-массива (array-element-type) должен быть либо (UNSIGNED-BYTE 8), либо t. Если буфер buffer не определён как (UNSIGNED-BYTE 8), то для этого буфера будет выделен размер size.
Некоторые флаги, используемые в качестве аргументов для recvfrom(2):
  •  :out-of-band - для приёма данных из-группы (только для потоковых сокетов)
  •  :peek - для хранения возвращённых данных в буферах ядра
  •  :wait-all - ждать до тех пор, пока не будет заполнен весь буфер
  •  :dont-wait - помечает текущий вызов не-блокируемым
Первые два значения возвращают буфер и число элементов, скопированных в буфер. Для сокетов интернет датаграмм возвращаются два дополнительных значения: адрес и порт удалённого компьютера с которого приняты эти данные. Для сокетов локальных датаграмм возвращается одно дополнительное значение: имя файла удалённой стороны с которой были приняты данные.

— Общая Фукнция: sockets:bind-address socket address &key reuse-address port &allow-other-keys

Устанавливает локальный адрес сокета socket в ADDRESS (и порт port для интернет сокетов). reuse-address устанавливает опцию сокета SO_REUSEADDR.

— Общая Функция: sockets:listen-on socket &key backlog &allow-other-keys

Запускает приём входящих соединений на сокете socket. backlog указывает максимальную длину очереди ожидаемых соединений.

— Общая Функция: sockets:accept-connection passive-socket &key timeout wait output-buffer-size input-buffer-size external-format &allow-other-keys

Возвращает одно соединение из очереди ожидаемых соединений на сокете socket. Если wait установлен в true, то выполняется ожидание входящего соединение. В случае истечения задержки timeout возвращается nil. Если wait установлен в false и нет никаких соединений, то в этом случае возвращается nil. external-format - это опциональный аргумент. Он обозначает внешний формат новых сокетов - по умолчанию, обозначает текущий сокет socket. Также, размеры буфера для новых сокетов указываются с помощью input-buffer-size и output-buffer-size.

— Макрос: sockets:with-accept-connection (var passive-socket &rest args) &body body

Привязывает var к сокету созданному через передачу passive-socket и args к функции accept-connection и исполняющему код body в качестве программы. Сокет автоматически закрывается после выхода.

— Общая Функция: sockets:connect socket address &key port wait timeout &allow-other-keys

Подключить сокет socket к адресу address. Для интернет сокетов Вы можете объявить порт для подключения с помощью ключевого аргумента port. По-умолчанию, значение для порта установлено в 0, это обозначает что операционная система должна сама выбрать случайный порт для подключения. Если wait установлен в true и соединение не было установлено в течении заданных секунд таймаута timeout, то подаётся сигнал iomux:poll-timeout, но эта вещь работает только для не-блокируемых сокетов и интернет сокетов.

— Общая Функция: sockets:disconnect socket

Разрушает ассоциирование сокета socket от другого удалённого адреса. Работает только для сокетов датаграмм.

— Общая Функция: sockets:shutdown socket &key read write

Завершает все или часть соединений. Если read установлен в не-NIL, то прекращается дальнейший приём; если write установлен в не-NIL, то прекращается дальнейшая передача. Для освобождения ресурсов операционной системы, для сокета socket должна вызываться функция close.

— Общая Функция: sockets:send-file-descriptor socket file-descriptor

Отправить дескриптор файла file-descriptor через сокет socket. Принимающий процесс должен использовать receive-file-descriptor для приёма дескриптора файла.

— Общая Функция: sockets:receive-file-descriptor socket

Принять дескриптор файла как вспомогательные данные через сокет socket.

Доступ к сокетам

— Общая Функция: sockets:socket-os-fd socket

Возвращает файловый дескриптор операционной системы для сокета socket.

— Общая Функция: sockets:socket-type socket

Возвращает тип сокета socket - :stream или :datagram.

— Общая Функция: sockets:socket-protocol object

Возвращает протокол сокета.

— Общая Функция: sockets:socket-address-family object

Возвращает семейство адреса для сокета.

— Общая Функция: sockets:local-name socket

Для интернет сокетов возвращается два значения: локалхост и локальный порт. Для локальных сокетов, возвращается локальное имя файла.

— Общая Функция: sockets:local-host socket

Возвращается локалхост сокета socket. Работает только для интернет сокетов.

— Общая Функция: sockets:local-port socket

Возвращается локальный порт сокета socket - в виде (UNSIGNED-BYTE 16). Работает только для интернет сокетов.

— Общая Функция: sockets:local-filename socket

Возвращается локальное имя файла для сокета socket. Работает только для локальных сокетов.

— Общая Функция: sockets:remote-name socket

Для интернет сокетов возвращается два значения: удалённый хост и удалённый порт. Для удалённых сокетов, возвращается имя удалённого файла. (Удалённого не в смысле удаления с диска, а в смысле территориального расположения.)

— Общая Функция: sockets:remote-host socket

Возвращает удалённый хост для сокета socket. Работает только для интернет сокетов.

— Общая Функция: sockets:remote-port socket

Возвращает удалённый порт для сокета socket - в виде (UNSIGNED-BYTE 16). Работает только для интернет сокетов.

— Общая Функция: sockets:remote-filename socket

Возвращает удалённое имя файла для сокета socket. Работает только для локальных сокетов.

Предикаты сокетов

— Общая Функция: sockets:socket-open-p socket

Возвращает булево значение, обозначающее открыт ли дескриптор файла для сокета socket.

— Общая Функция: sockets:socket-connected-p socket

Возвращает булево значение, обозначающее подключён или нет сокет socket.

— Функция: sockets:socket-ipv6-p socket

Возвращает t в случае когда сокет socket является AF_INET6 сокетом.

Классы

— Класс: sockets:address

Список приоритета класса: address, standard-object, t
Базовый класс для всех классов адреса сокета.

— Класс: sockets:inet-address

Список приоритета класса: inet-address, address, standard-object, t
Базовый класс для адресов IPv4 и IPv6.

— Класс: sockets:ipv4-address

Список приоритета класса: ipv4-address, inet-address, address, standard-object, t
Адреса IPv4. Это низкоуровневое представление. Доступ к этому представлению производится как к вектору с типом IPV4-ARRAY с помощью функции address-name.

— Класс: sockets:ipv6-address

Список приоритета класса: ipv6-address, inet-address, address, standard-object, t
Адреса IPv6. Это низкоуровневое представление. Доступ к этому представлению производится как к вектору с типом IPV6-ARRAY с помощью функции address-name.

— Класс: sockets:local-address

Список приоритета класса: local-address, address, standard-object, t
Адреса unix сокетов.

Функции

— Функция: sockets:make-address name

Конструирует объект адреса. Тип аргумента name должен быть следующим: IPV4-ARRAY, IPV6-ARRAY или строкой. Если тип аргумента name является строкой, то в этом случае будет создаваться экземпляр IPV4-ADDRESS, IPV6-ADDRESS или локального адреса. В противном случае будет выдана ошибка type-error. Также читайте ensure-address.

— Общая Функция: sockets:copy-address address

Возвращает копию адреса address, где ADDRESS= оригиналу.

— Функция: sockets:ensure-address address &key family abstract errorp

Если family установлен в :local, создаётся экземпляр локального адреса с address в качестве слота name.Если family установлено в :internet, то в этом случае тип адреса вычисляется с помощью address-to-vector и на основе получившихся данных создаётся экземпляр подтипа inet-address. Если адрес неправилен и значение errorp не ноль, то в этом случае сигнализируется cl:parse-error, в противном случае возвращается nil.
Если адрес уже является экземпляром address класса, производится проверка соответствия аргумента family и адрес возвращается без модификации.

— Общая Функция: sockets:address-to-string address

Возвращает текстовое представление адреса address.

— Функция: sockets:address-to-vector address

Преобразовать все представления интернет адресов в вектор. Допустимыми являются следующие объекты: 32-битное неотрицательное целочисленное, строки, векторы и inet-address. Если адрес окажется верным, будут возвращены два значения: вектор и тип адреса (:IPV4 или IPV6), иначе будет возвращён nil.

Константы

— Константа: sockets:+ipv4-loopback+

IPv4 адрес петли. (127.0.0.1)

— Константа: sockets:+ipv4-unspecified+

Неопределённый IPv4 адрес. (0.0.0.0)

— Константа: sockets:+ipv6-interface-local-all-nodes+

Локальный адрес всех узлов интерфейса. (ff01::1)

— Константа: sockets:+ipv6-interface-local-all-routers+

Локальный адрес всех маршрутизаторов интерфейса. (ff01::2)

— Константа: sockets:+ipv6-link-local-all-nodes+

Локальный адрес всех узлов соединения. (ff02::1)

— Константа: sockets:+ipv6-link-local-all-routers+

Локальный адрес всех маршрутизаторов соединения. (ff02::2)

— Константа: sockets:+ipv6-loopback+

IPv6 адрес петли. (::1)

— Константа: sockets:+ipv6-site-local-all-routers+

Локальный адрес всех маршрутизаторов с одной стороны. (ff05::2)

— Константа: sockets:+ipv6-unspecified+

Неопределённый IPv6 адрес. (::)

Предикаты адресов

— Функция: sockets:addressp address

Возвращает t если адрес address является объектом класса address. Не возвращает t для остальных низко-уровневых представлений адреса.

— Общая Функция: sockets:address= addr1 addr2

Возвращает t если оба аргумента являются одинаковыми адресами сокета.

— Функция: sockets:address-equal-p addr1 addr2 &optional family

Возвращает t если оба аргумента обозначают одинаковые адреса сокета.

— Функция: sockets:ipv4-address-p address

Возвращает t если адрес address является объектом IPv4 адреса.

—Функция: sockets:ipv6-address-p address

Возвращает t если адрес address является объектом IPv6 адреса.

— Функция: sockets:local-address-p address

Возвращает t если адрес address является объектом локального адреса.

— Общая Функция: sockets:abstract-address-p object

Возвращает t если адрес address является локальным адресом, находящимся в абстрактном пространстве имён.

— Общая Функция: sockets:address-type address

Возвращает ключевое слово символа, обозначающее вид адреса address (:IPV4, :IPV6 или :LOCAL). Если адрес address является неизвестным объектом адреса, возвращается nil.

— Общая Функция: sockets:inet-address-loopback-p address

Возвращает t если адрес address является адресом петли.

— Общая Функция: sockets:inet-address-multicast-p address

Возвращает t если адрес address является широковещательным интернет адресом.

— Общая Функция: sockets:inet-address-type address

Возвращает тип адреса address в виде двух значений:
  • один из протоколов: :IPV4 или :IPV6
  • один из вида: :unspecified, :loopback, :multicast или :unicast
Для unicast и multicast IPv6 адресов, третье значение будет соответствовать IPV6-UNICAST-TYPE или IPV6-MULTICAST-TYPE соответственно.

— Общая Функция: sockets:inet-address-unicast-p address

Возвращает t если адрес address является одновещательным интернет адресом.

— Общая Функция: sockets:inet-address-unspecified-p addr

Возвращает t если addr является "неопределённым" интернет адресом.

— Функция: sockets:ipv6-admin-local-multicast-p address

Возвращает t если адрес address является административно-локальным широковещательным IPv6 адресом.

— Функция: sockets:ipv6-global-multicast-p address

Возвращает t если адрес address глобальным широковещательным IPv6 адресом.

— Функция: sockets:ipv6-global-unicast-p address

Возвращает t если адрес address является одновещательным глобальным IPv6 адресом.

— Функция: sockets:ipv6-interface-local-multicast-p address

Возвращает t если адрес address является интерфейсно-локальным IPv6 адресом.

— Функция: sockets:ipv6-ipv4-mapped-p address

Возвращает t если адрес address является IPv6 адресом инкапсулированным в IPv4 адрес.

— Функция: sockets:ipv6-link-local-multicast-p address

Возвращает t если адрес address является link-local IPv6 адресом.

— Функция: sockets:ipv6-link-local-unicast-p address

Возвращает t если адрес address является одноадресным link-local IPv6 адресом.

— Функция: sockets:ipv6-multicast-type address

Возвращает многоадресный тип address или nil если этот адрес не является многоадресным адресом.

— Функция: sockets:ipv6-organization-local-multicast-p address

Возвращает t если адрес address является многоадресным organization-local IPv6 адресом.

— Функция: sockets:ipv6-reserved-multicast-p address

Возвращает t если адрес address является реверсированным многоадресным IPv6 адресом.

— Функция: sockets:ipv6-site-local-multicast-p address

Возвращает t если адрес address является многоадресным site-local IPv6 адресом.

— Функция: sockets:ipv6-site-local-unicast-p address

Возвращает t если адрес address является одноадресным site-local IPv6 адресом.

— Функция: sockets:ipv6-solicited-node-multicast-p address

Возвращает t если адрес address многоадресным solicited-node IPv6 адресом.

— Функция: sockets:ipv6-transient-multicast-p address

Возвращает t если адрес address является преходящим многоадресным IPv6 адресом.

— Функция: sockets:ipv6-unassigned-multicast-p address

Возвращает t если адрес address является не назначенным многоадресным IPv6 адресом.

— Функция: sockets:ipv6-unicast-type address

Возвращает одноадресный тип адреса address или nil если он не является одноадресным адресом.

Адресная арифметика

— Функция: sockets:make-netmask &key cidr class

Создаёт маску подсети с помощью определения его класса (:A, :b или :C) или cidr суффикса (число между 0 и 32).

— Функция: sockets:ensure-netmask thing

Если thing является IPV4-ADDRESS типом, то этот thing будет возвращён как есть; ключевое слово должно быть одним из следующих: :a, :b или :c. В противном случае, thing будет возвращён как cidr суффикс.

— Общая Функция: sockets:inet-address-network-portion address netmask

Применяет маску сети netmask к адресу address для вычисления сетевой части address.

— Общая Функция: sockets:inet-address-host-portion address netmask

Применить сетевую маску netmask к адресу для вычисления хостовой части адреса address.

— Общая Функция: sockets:inet-address-in-network-p address network

Возвращает t если адрес address является частью подсети определяемой сетью network.

— Общая Функция: sockets:inet-addresses-in-same-network-p address1 address2 network

Возвращает t в случае когда ADDRESS1 и ADDRESS2 являются частью подсети определённой с помощью network.

— Общая Функция: sockets:inet-address-network-class address

Возвращает класс сети для адреса address: :a, :b, :c, :d или :e .

— Общая Функция: sockets:inet-address-private-p address

Возвращает t если адрес address находится в частном диапазоне сети. Частная IPv4 сеть является следующей: 10.0.0.0/8, 172.16.0.0/12 и 192.168.0.0/16. Для деталей читайте http://en.wikipedia.org/wiki/Private_network.

Низкоуровневая работа с адресами

— Константа: sockets:+max-ipv4-value+

Целочисленное, обозначает 255.255.255.255

— Функция: sockets:dotted-to-integer address

Конвертирует IPv4 адрес с точками в (UNSIGNED-BYTE 32).

— Функция: sockets:integer-to-dotted integer

Конвертирует IPv4 адрес в строку с точками из (UNSIGNED-BYTE 32).

— Функция: sockets:vector-to-integer vector

Конвертирует вектор в 32-х битное целочисленное не отрицательное значение.

— Функция: sockets:integer-to-vector ipaddr

Конвертирует 32-х битное целочисленное не отрицательное число в вектор.

— Функция: sockets:dotted-to-vector address

Конвертирует IPv4 адрес с точками в (SIMPLE-ARRAY (UNSIGNED-BYTE 8) 4).

— Функция: sockets:vector-to-dotted vector

Конвертирует 4-х элементный вектор строку с точками.

— Функция: sockets:colon-separated-to-vector string

Конвертирует IPv4 адрес разделённый с помощью двоеточий в (SIMPLE-ARRAY (UNSIGNED-BYTE 16) 8).

— Функция: sockets:vector-to-colon-separated vector &optional case

Конвертирует (SIMPLE-ARRAY (UNSIGNED-BYTE 16) 8) в IPv6 адрес разделённый двоеточием. case может быть следующими значениями: :downcase или :upcase.

— Функция: sockets:string-address-to-vector address

Конвертирование адреса в виде строки (с разделением точками или двоеточием) в вектор. Если строка не является правильным адресом, возвращается nil.

— Функция: sockets:map-ipv4-address-to-ipv6 address

Возвращает IPv4 адрес в виде IPv6 адреса.

— Функция: sockets:map-ipv6-address-to-ipv4 address

Отделяет IPv4 адреса из IPv6 адреса. Возвращает ошибку, если адрес не является IPv4 адресом отображённым в вид IPv6.

DNS

Функции

— Функция: sockets:lookup-hostname host &key ipv6

Находит хост по имени или адресу. IPV6 обозначает IPv6 окружение, по умолчанию установлено в *IPV6*. Возвращается 4 значения:
  • адрес
  • список одинаковых адресов (конечно, если они существуют)
  • каноничное имя хоста
  • alist всех имён хоста с соответствующими адресами

— Функция: sockets:ensure-hostname address &key ipv6 errorp

Если адрес address является обозначением интернет адресов, то, при необходимости, производится конвертация в объект интернет адреса. В противном случае предполагается наличие имени хоста. В качестве первого значения возвращается главный адрес, предполагаемый адрес возвращается в виде списка в виде второго значения.

Состояния

— Состояние: sockets:resolver-error

Список приоритетов класса: resolver-error, condition, t
Сигнализирует об ошибке при попытке определения адреса.

— Общая Функция: sockets:resolver-error-datum condition

Возвращается причина, по которой возникло состояние resolver-error.

— Состояние: sockets:resolver-again-error

Список приоритетов класса: resolver-again-error, resolver-error, condition, t
Состояние сигнализирует о временной ошибке.

— Состояние: sockets:resolver-fail-error

Список приоритетов класса: resolver-fail-error, resolver-error, condition, t
Состояние сигнализирует о не восстановимой ошибке.

— Состояние: sockets:resolver-no-name-error

Список приоритетов класса: resolver-no-name-error, resolver-error, condition, t
Состояние сигнализирует о не обнаружении хоста или службы.

— Состояние: sockets:resolver-unknown-error

Список приоритетов класса: resolver-unknown-error, resolver-error, condition, t
Состояние сигнализирует о неизвестной ошибке при определении адреса.

Службы

— Функция: sockets:lookup-service service &optional protocol

Проверяет наличие службы по порту или имени. Протокол protocol должен быть одним из :tcp, :udp или :any.

— Состояние: sockets:unknown-service

Список приоритетов класса: unknown-service, condition, t
Состояние генерируется при не обнаружении службы.

— Общая Функция: sockets:unknown-service-datum condition

Возвращается причина, по которой произошла генерация состояния unknown-service.

Протоколы

— Функция: sockets:lookup-protocol protocol

Проверить доступность протокола по имени и номеру. Возвращает ошибку unknown-protocol в случае не обнаружения протокола.

— Состояние: sockets:unknown-protocol

Список приоритетов класса: unknown-protocol, condition, t
Состояние возникает при не нахождении протокола.

— Общая Функция: sockets:unknown-protocol-datum condition

Возвращает причину приведшую к возникновению состояния unknown-protocol.

Сетевые интерфейсы

— Функция: sockets:interface-index interface

Возвращает индекс сетевого интерфейса присвоенный операционной системой.

— Функция: sockets:interface-name interface

Возвращает имя сетевого интерфейса.

— Функция: sockets:make-interface name index

Конструктор для объекта интерфейса.

— Функция: sockets:lookup-interface interface

Проверяет доступность интерфейса по имени или индексу. Состояние unknown-interface порождается при не обнаружении интерфейса.

— Функция: sockets:list-network-interfaces

Возвращает список доступных интерфейсов.

— Состояние: sockets:unknown-interface

Список приоритетов класса: unknown-interface, enxio, syscall-error, iolib-error, error, serious-condition, iolib-condition, condition, t

Состояние порождается когда сетевой интерфейс не найден.

— Общая Функция: sockets:unknown-interface-datum condition

Возвращает причину, по которой появилось состояние unknown-interface.

Автор перевода: Charlz_Klug. Оригинал здесь. Дата: 23.02.2012.