Next: , Previous: , Up: Processes   [Contents][Index]


36.14 ネットワーク接続

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関数はopenclosedconnectfailedをリターンします。ネットワークサーバーにたいしては、状態は常にlistenになります。実際のサブプロセスにたいしては、これらの値はリターンされません。Process Informationを参照してください。

stop-processcontinue-processを呼び出すことにより、ネットワークプロセスの処理の停止と再開が可能です。サーバープロセスにたいする停止は新たな接続の受け付けないことを意味します(サーバー再開時は5つまでの接続リクエストがキューされる。これがOSによる制限でなければこの制限は増やすことができる。Network Processesmake-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関数は、何であれ利用可能なサポートを使用して、暗号化接続作成の詳細を透過的に処理できます。

Function: open-network-stream name buffer host service &rest parameters

この関数はオプションで暗号つきでTCP接続をオープンして、その接続を表すプロセスオブジェクトをリターンする。

name引数はプロセスオブジェクトの名前を指定する。これは必要に応じて一意になるよう変更される。

buffer引数はその接続に関連付けるバッファー。その接続からの出力は出力を処理する独自のフィルター関数を指定していない場合には、buffernilならその接続はバッファーに関連付けられない。

引数hostserviceはどこに接続するかを指定する。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を参照)。TLSSTARTTLSにたいしてのみ使用される。

: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’のいずれか。