Emacs
Lispプログラムは、同一マシン上または他のマシン上の他のプロセスに対して、ストリーム(TCP)およびデータグラム(UDP)のネットワーク接続(データグラムを参照)を開くことができます。ネットワーク接続はLispにおいてサブプロセスと同様に扱われ、プロセスオブジェクトによって表現されます。ただし、通信相手のプロセスはEmacsプロセスの子プロセスではなく、プロセスIDも持たず、そのプロセスを強制終了したりシグナルを送信したりすることはできません。行えるのは、データの送受信のみです。delete-processは接続を閉じますが、相手側のプログラムを強制終了させることはありません。接続の閉鎖に対してどう対処するかは、そのプログラム側で決定する必要があります。
Lispプログラムは、ネットワークサーバーを作成することで接続を待ち受けることができます。ネットワークサーバーも一種のプロセスオブジェクトとして表現されますが、ネットワーク接続とは異なり、ネットワークサーバー自体がデータを転送することはありません。接続リクエストを受信すると、直前に確立された接続を表す新しいネットワーク接続を作成します。(このネットワーク接続は、プロセスのplistを含む特定の情報をサーバーから継承します。)その後、ネットワークサーバーは再び接続リクエストの待ち受けに戻ります。
ネットワーク接続やサーバーは、キーワードと引数のペアからなる引数リストを指定して 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件の接続リクエストがキューに蓄積されます。この上限は拡張可能ですが、オペレーティングシステムによって制限されている場合は除きます。make-network-process の :server
キーワード、make-network-process
を参照してください。)ネットワークストリーム接続の場合、停止状態とは入力を処理しない状態を指します(到着した入力は、接続を再開するまで待機します)。データグラム接続の場合、一定数のパケットがキューに蓄積されることがありますが、入力が失われる可能性があります。関数
process-command
を使用して、ネットワーク接続またはサーバーが停止状態にあるかどうかを判定できます。nil
以外の値であれば、停止状態であることを意味します。
Emacsは、GnuTLS Transport Layer Security
Libraryの組み込みサポートを利用して、暗号化されたネットワーク接続を確立できます。詳細はGnuTLSプロジェクトページを参照してください。EmacsがGnuTLSサポート付きでコンパイルされている場合、関数gnutls-available-pが定義されており、non-nilを返します。詳細については、The Emacs-GnuTLS
manualの概要を参照してください。open-network-stream関数は、利用可能なあらゆるサポートを用いて、暗号化接続の確立に関する詳細を透過的に処理できます。
この関数は、オプションで暗号化を行いながらTCP接続を確立し、その接続を表すプロセスオブジェクトを返します。
name 引数は、プロセスオブジェクトの名前を指定します。一意になるよう、必要に応じて変更されます。
buffer
引数は、接続に関連付けるバッファです。出力を処理するための独自のフィルタ関数を指定しない限り、接続からの出力はこのバッファに挿入されます。buffer が nil
である場合、その接続はどのバッファにも関連付けられていないことを意味します。
引数 host と service
は接続先を指定し、host はホスト名(文字列)、service は定義済みネットワークサービスの名前(文字列)またはポート番号(80 のような整数や "80"
のような整数文字列)です。
残りの引数 parameters は、主に暗号化接続に関連するキーワードと引数のペアです:
:nowait booleannil 以外の場合は、非同期接続を試みる。
:noquery query-flagプロセスクエリフラグをquery-flagに初期化します。終了前のクエリを参照してください。
:coding codingcoding-system-for-read や coding-system-for-write
をバインドする代わりに、ネットワークプロセスで使用するコーディングシステムを設定する際にこれを使用してください。詳細は make-network-process を参照してください。
:type type接続の種類。選択肢は以下の通りです:
plain通常の非暗号化接続。
tlssslTLS(Transport Layer Security)接続。
nilnetworkまずは平文接続から開始し、パラメータ ‘:success’ および ‘:capability-command’ が指定されている場合は、STARTTLS 経由で暗号化接続へのアップグレードを試みてください。それが失敗した場合は、非暗号化接続を維持してください。
starttlsnil については、STARTTLS
が失敗した場合は接続を切断する。
shellシェル接続。
:always-query-capabilities booleannil 以外の場合は、‘plain’ 接続を行う場合であっても、常にサーバーの機能を問い合わせてください。
:capability-command capability-commandホストの機能を照会するためのコマンド。文字列(そのままサーバーに送信される)か、文字列を返す関数(接続時にサーバーから送られる「greeting」という単一の引数で呼び出される)のいずれかを指定できます。
:end-of-command regexp:end-of-capability regexpコマンドの末尾、またはコマンド capability-command の末尾に一致する正規表現。後者はデフォルトで前者となります。
:starttls-function function単一の引数(capability-commandへの応答)を受け取り、nil、またはサポートされている場合はSTARTTLSを有効にするコマンドのいずれかを返す関数。
:success regexp正常なSTARTTLSネゴシエーションに一致する正規表現。
:use-starttls-if-possible booleannil 以外の場合は、Emacs に TLS サポートが組み込まれていなくても、機会的な STARTTLS アップグレードを行う。
:warn-unless-encrypted booleannil
以外の場合、最終的な接続タイプが暗号化されていないときにユーザーに警告を表示します。これは、ほとんどのユーザーがネットワークトラフィックの暗号化を想定する
IMAP などのプロトコルにおいて有用です。これは STARTTLS アップグレードの失敗による可能性があり、:return-list(nil
以外)を指定することで、発生したあらゆるエラーを捕捉できます。
:client-certificate list-or-t
¶証明書キーファイルと証明書ファイル自体を指定する (key-file
cert-file) 形式のリスト、またはこの情報を auth-source に問い合わせることを意味する t(Emacs auth-source Library の
auth-source
を参照)。TLS または STARTTLS でのみ使用されます。:client-certificate が指定されていない場合に auth-source の自動問い合わせを有効にするには、network-stream-use-client-certificates を t にカスタマイズしてください。
:return-list cons-or-nil
この関数の戻り値。省略されるか nil
の場合は、プロセスオブジェクトを返します。それ以外の場合は、(process-object . plist) 形式のコンスを返し、plist
には以下のキーワードを含めることができます:
:greeting string-or-nilnil 以外の場合、ホストから返された挨拶文字列。
:capabilities string-or-nilnil 以外の場合、ホストの機能文字列。
:type symbol接続タイプ:‘plain’ または ‘tls’。
:error symbolSTARTTLSアップグレードの実行時に発生した任意のエラーを記述する文字列。
:shell-command string-or-nil接続 type が shell
である場合、このパラメータは接続を確立するために実行されるフォーマット指定文字列(カスタムフォーマット文字列を参照)として解釈されます。利用可能な指定子は、ホスト名用の
‘%s’ とポート番号用の ‘%p’ です。例えば、通常の接続を行う前にまず ‘gateway’ に ssh で接続したい場合、このパラメータの値は ‘ssh gateway nc %s %p’ のようになります。