Spec-Zone.ru › Elisp

Сетевые подключения

Программы Emacs Lisp могут открывать потоковые (TCP) и дейтаграммные (UDP) сетевые подключения (см. Дейтаграммы) к другим процессам на том же компьютере или на других компьютерах. Сетевое подключение обрабатывается Lisp так же, как и дочерний процесс, и представлено объектом процесса. Однако, процесс, с которым вы общаетесь, не является дочерним процессом процесса Emacs, не имеет идентификатора процесса ID и вы не можете его убить или отправлять ему сигналы. Все, что вы можете сделать, это отправлять и получать данные. delete-process закрывает подключение, но не убивает программу на другом конце; эта программа должна сама решать, что делать при закрытии подключения.

Программы Lisp могут слушать подключения, создавая сетевые серверы. Сетевой сервер также представлен своего рода объектом процесса, но в отличие от сетевого подключения, сетевой сервер никогда сам не передает данные. Когда он получает запрос на подключение, он создает новое сетевое подключение для представления только что установленного соединения. (Сетевое подключение наследует определенную информацию, включая список параметров процесса, от сервера.) Затем сетевой сервер возвращается к прослушиванию дополнительных запросов на подключение.

Сетевые подключения и серверы создаются путем вызова make-network-process со списком аргументов, состоящим из пар "ключ/аргумент", например :server t для создания серверного процесса или :type 'datagram для создания дейтаграммного подключения. Подробности см. в разделе Сетевой уровень низкого уровня. Вы также можете использовать функцию open-network-stream, описанную ниже.

Для различения различных типов процессов функция process-type возвращает символ network для сетевого подключения или сервера, serial для подключения к последовательному порту, pipe для подключения через канал или real для реального дочернего процесса.

Функция process-status возвращает open, closed, connect, stop, или failed для сетевых подключений. Для сетевого сервера статус всегда listen. За исключением stop, ни одно из этих значений не возможно для реального дочернего процесса. См. Информация о процессе.

Вы можете остановить и возобновить работу сетевого процесса, вызвав stop-process и continue-process. Для серверного процесса остановка означает отказ от принятия новых подключений. (До 5 запросов на подключение будут поставлены в очередь на время возобновления работы сервера; вы можете увеличить этот лимит, если он не навязан операционной системой—см. ключевое слово :server функции make-network-process, Сетевые процессы.) Для сетевого потокового подключения остановка означает приостановку обработки входящих данных (любые входящие данные ожидают возобновления подключения). Для дейтаграммного подключения некоторое количество пакетов может быть поставлено в очередь, но входные данные могут быть утеряны. Вы можете использовать функцию process-command для определения, остановлено ли сетевое подключение или сервер; значение, отличное от nil, означает, что да.

Emacs может создавать зашифрованные сетевые подключения, используя встроенную поддержку библиотеки Transport Layer Security (TLS) GnuTLS; см. страницу проекта GnuTLS. Если ваш Emacs был скомпилирован с поддержкой GnuTLS, функция gnutls-available-p определена и возвращает не-nil. Более подробная информация в Обзоре в Руководстве Emacs-GnuTLS. Функция open-network-stream может прозрачно обрабатывать детали создания зашифрованных подключений для вас, используя любую доступную поддержку.

Функция: open-network-stream name buffer host service &rest parameters

Эта функция открывает TCP-соединение с необязательной шифровкой и возвращает объект процесса, представляющий это соединение.

Аргумент name задаёт имя для объекта процесса. Он изменяется по мере необходимости, чтобы сделать его уникальным.

Аргумент buffer — это буфер, ассоциированный с подключением. Выходные данные из подключения вставляются в буфер, если вы не указали собственную функцию фильтра для обработки вывода. Если buffer равен nil, это означает, что подключение не ассоциировано ни с каким буфером.

Аргументы host и service задают, куда подключаться; host — это имя хоста (строка), а service — имя определённой сетевой службы (строка) или номер порта (целое число, например 80, или строка, представляющая целое число, например "80").

Остальные аргументы parameters — это пары "ключ/аргумент", которые в основном важны для зашифрованных соединений:

:nowait boolean

Если не-nil, попытаться установить асинхронное соединение.

:coding coding

Используйте это для установки кодовых систем, используемых сетевым процессом, с предпочтением к привязке coding-system-for-read или coding-system-for-write. Подробности см. в разделе Сетевые процессы.

:type type

Тип соединения. Доступные варианты:

plain

Обычное, незашифрованное соединение.

tls
ssl

Соединение TLS (Transport Layer Security).

nil
network

Начать с простого соединения, а если предоставлены параметры ‘:success’ и ‘:capability-command’, попытаться обновить до зашифрованного соединения через STARTTLS. Если это не удалось, сохранить незашифрованное соединение.

starttls

Как в nil, но если STARTTLS не удался, разорвать соединение.

shell

Соединение с оболочкой.

:always-query-capabilities boolean

Если не-nil, всегда запрашивать возможности сервера, даже при «простом» соединении.

:capability-command capability-command

Команда для запроса возможностей хоста. Это может быть либо строка (которая затем будет отправлена на сервер без изменений), либо функция (вызываемая с одним параметром; "приветствие" от сервера при подключении) и должна вернуть строку.

:end-of-command regexp
:end-of-capability regexp

Регулярное выражение, соответствующее концу команды или концу команды capability-command. Последнее по умолчанию равно первому.

:starttls-function function

Функция с одним аргументом (ответ на capability-command), которая возвращает либо nil, либо команду для активации STARTTLS, если она поддерживается.

:success regexp

Регулярное выражение, соответствующее успешной переговорной процедуре STARTTLS.

:use-starttls-if-possible boolean

Если не-nil, выполнять оппортунистические обновления STARTTLS, даже если в Emacs нет встроенной поддержки TLS.

:warn-unless-encrypted boolean

Если не-nil, и :return-value также не-nil, Emacs выдаст предупреждение, если соединение не зашифровано. Это полезно для протоколов, таких как IMAP и подобных, где большинство пользователей ожидают, что сетевой трафик будет зашифрован.

:client-certificate list-or-t

Либо список вида (key-file cert-file), указывающий файл ключа сертификата и сам сертификат, или t, означающее запрос у auth-source этой информации (см. auth-source в Библиотеке Emacs auth-source). Используется только для TLS или STARTTLS. Чтобы включить автоматические запросы к auth-source при отсутствии :client-certificate, настройте network-stream-use-client-certificates на t.

:return-list cons-or-nil

Значение возврата этой функции. Если опущено или nil, возвращается объект процесса. Иначе, список вида (process-object . plist), где plist содержит ключевые слова:

:greeting string-or-nil

Если не-nil, строка приветствия, возвращённая хостом.

:capabilities string-or-nil

Если не-nil, строка возможностей хоста.

:type symbol

Тип соединения: ‘plain’ или ‘tls’.

:shell-command string-or-nil

Если подключение type находится в состоянии shell, этот параметр будет интерпретирован как строка формата, которая будет выполнена для создания подключения. Доступные спецификации — ‘%s’ для имени хоста и ‘%p’ для номера порта. Например, если вы хотите сначала подключиться к «шлюзу» через ssh, прежде чем подключаться по простому соединению, то этот параметр может быть чем-то вроде «ssh gateway nc %s %p».

Copyright © 1990-1996, 1998-2022 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/Network.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API