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