Next: Network Servers, Previous: Transaction Queues, Up: Processes [Contents][Index]
Emacs
Lispプログラムは同一マシンまたは他のマシン上の別プロセスにたいしてストリーム(TCP)やデータグラム(UDP)のネットワーク接続(Datagramsを参照)をオープンできます。ネットワーク接続はLispによりサブプロセスと同様に処理されて、プロセスオブジェクトとして表されます。しかし対話を行うそのプロセスはEmacsの子プロセスではなく、プロセスIDをもたず、それをkillしたりシグナルを送信することはできません。行うことができるのはデータの送信と受信だけです。delete-process
は接続をクローズしますが、他方の端のプログラムをkillしません。そのプログラムは接続のクローズについて何を行うか決定しなければなりません。
ネットワークサーバーを作成することによりLispプログラムは接続をlistenできます。ネットワークサーバーもある種のプロセスオブジェクトとして表されますが、ネットワーク接続とは異なりネットワークサーバーがデータ自体を転送することは決してありません。接続リクエストを受信したときは、それにたいして作成した接続を表す新たなネットワーク接続を作成します(そのネットワーク接続はサーバーからプロセスplistを含む特定の情報を継承する)。その後でネットワークサーバーは更なる接続リクエストのlistenに戻ります。
ネットワーク接続とサーバーは、キーワード/引数のペアーで構成される引数リストでmake-network-process
を呼び出すことにより作成されます。たとえば:server
t
はサーバープロセス、:type 'datagram
はデータグラム接続を作成します。詳細はLow-Level Networkを参照してください。以下で説明するopen-network-stream
を使用することもできます。
異なるプロセスのタイプを区別するために、process-type
関数はネットワーク接続またはサーバーにたいしてはシンボルnetwork
、シリアルポート接続はserial
、実際のサブプロセスにたいしてはreal
をリターンします。
ネットワーク接続にたいして、process-status
関数はopen
、closed
、connect
、failed
をリターンします。ネットワークサーバーにたいしては、状態は常にlisten
になります。実際のサブプロセスにたいしては、これらの値はリターンされません。Process Informationを参照してください。
stop-process
とcontinue-process
を呼び出すことにより、ネットワークプロセスの処理の停止と再開が可能です。サーバープロセスにたいする停止は新たな接続の受け付けないことを意味します(サーバー再開時は5つまでの接続リクエストがキューされる。これがOSによる制限でなければこの制限は増やすことができる。Network Processesのmake-network-process
の:server
を参照)。ネットワークストリーム接続にたいしては、停止は入力の処理を行わないことを意味します(到着するすべての入力は接続の再開まで待つ)。データグラム接続にたいしては、いくらかのパケットはキューされますが入力は失われるかもしれません。ネットワーク接続またはサーバーが停止しているかどうかを判断するために、関数process-command
を使用できます。これが非nil
なら停止しています。
ビルトインまたは外部のサポートを使用することにより、Emacsは暗号化されたネットワーク接続を作成できます。ビルトインのサポートはGnuTLSライブラリー(“TLS:
Transport Layer Security”)を使用します。the GnuTLS project
pageを参照してください。GnuTLSサポートつきでEmacsをコンパイルした場合は、関数gnutls-available-p
が定義され、非nil
をリターンします。詳細はsee Overview in The Emacs-GnuTLS
manualを参照してください。外部のサポートの場合は、starttls.elライブラリーを使用します。これはシステム上にgnutls-cli
のようなヘルパーユーティリティーのインストールを必要とします。open-network-stream
関数は、何であれ利用可能なサポートを使用して、暗号化接続作成の詳細を透過的に処理できます。
この関数はオプションで暗号つきでTCP接続をオープンして、その接続を表すプロセスオブジェクトをリターンする。
name引数はプロセスオブジェクトの名前を指定する。これは必要に応じて一意になるよう変更される。
buffer引数はその接続に関連付けるバッファー。その接続からの出力は出力を処理する独自のフィルター関数を指定していない場合には、bufferがnil
ならその接続はバッファーに関連付けられない。
引数hostとserviceはどこに接続するかを指定する。hostはホスト名(文字列)、serviceは定義済みのネットワークサービス名(文字列)、またはポート番号(数字)。
残りの引数parametersは主に暗号化された接続に関連するキーワード/引数のペアー:
:nowait boolean
非nil
なら非同期接続を試みる。
:type type
接続のタイプ。オプションは以下のとおり:
plain
通常の暗号化されていない接続。
tls
ssl
TLS(“Transport Layer Security”)接続。
nil
network
plain接続を開始してパラメーター‘:success’と‘:capability-command’が与えられたら、STARTTLSを通じて暗号化接続への更新を試みる。これが失敗したら暗号化されていない接続のまま留まる。
starttls
nil
と同様だがSTARTTLSが失敗したらその接続を切断する。
shell
shell接続。
:always-query-capabilities boolean
非nil
なら、たとえ‘plain’な接続を行っているときでも常にサーバーの能力を問い合わせる。
: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
なら、たとえEmacsがビルトインのTLSサポートをもっていなくても、日和見的(opportunistic)にSTARTTLSアップグレードを行う。
:client-certificate list-or-t
証明書(certificate)のキーと、証明書のファイル自身を命名する(key-file
cert-file)
という形式のリスト、またはこの情報にたいしてauth-source
を尋ねることを意味するt
のいずれか(Overview in The Auth-Source
Manualを参照)。TLSやSTARTTLSにたいしてのみ使用される。
:return-list cons-or-nil
この関数のリターン値。省略またはnil
ならプロセスオブジェクトをリターンする。それ以外なら(process-object
. plist)
という形式のコンスセルをリターンする。ここでplistは以下のキーワード:
:greeting string-or-nil
非nil
ならホストからリターンされたgreeting(挨拶)文字列。
:capabilities string-or-nil
非nil
ならホストの能力(capability)文字列。
:type symbol
接続タイプであり、‘plain’か‘tls’のいずれか。