IOlib
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
- Возвращает число отправленных байтов.
- Ниже перечислены некоторые флаги, которые можно передавать в sendto(2):
— Общая Функция: 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.