Next: , Up: Low-Level Network   [Contents][Index]


36.17.1 make-network-process

ネットワーク接続やネットワークサーバーを作成する基本的な関数はmake-network-processです。これは与えられた引数に応じて、これらの仕事のいずれかを行うことができます。

Function: make-network-process &rest args

この関数はネットワーク接続やサーバーを作成して、それを表すプロセスオブジェクトをリターンする。引数argsはキーワード/引数のペアからなるリスト。キーワードの省略は:coding:filter-multibyte:reuseaddrを除いて、常に値としてnilを指定したのと同じことになる。重要なキーワードを以下に示す(ネットワークオプションに対応するキーワードを以降のセクションにリストする)。

:name name

プロセス名として文字列nameを使用する。一意にするために必要に応じて変更され得る。

:type type

コミュニケーションのタイプを指定する。値nilはストリーム接続(デフォルト)、datagramはデータグラム接続、seqpacketはシーケンスパケットストリーム(sequenced packet stream)による接続を指定する。接続およびサーバーの両方でこれらのタイプを指定できる。

:server server-flag

server-flagが非nilならサーバー、それ以外なら接続を作成する。ストリームタイプのサーバーではserver-flagはそのサーバーへの保留中の接続キューの長さを指定する整数を指定できる。キューのデフォルト長は5。

:host host

接続するホストを指定する。hostはホスト名かインターネットアドレスを表す文字列、またはローカルホストを表すシンボルlocalであること。サーバーのときにhostを指定する場合には有効なローカルホストのアドレスを指定しなければならず、そのアドレスに接続するクライアントだけが受け入れられるだろう。

:service service

serviceは接続先のポート番号、またはサーバーにたいしてはlistenするポート番号。これはポート番号に変換されるようなサービス名、または直接ポート番号を指定する整数であること。サーバーにたいしてはtも指定でき、これは未使用のポート番号をシステムに選択させることを意味する。

:family family

familyは接続のアドレス(またはプロトコル)のファミリーを指定する。nilは与えられたhostserviceにたいして自動的に適切なアドレスファミリーを決定する。localはUnixのsocketを指定して、この場合にはhostは無視される。ipv4ipv6はそれぞれIPv4とIPv6の使用を指定する。

:local local-address

サーバープロセスではlocal-addressはlistenするアドレスである。これはfamilyhostserviceをオーバーライドするので、これらを指定しないこともできる。

:remote remote-address

接続プロセスではremote-addressは接続先のアドレス。これはfamilyhostserviceをオーバーライドするので、これらを指定しないこともできる。

データグラムサーバーではremote-addressはリモートデータグラムアドレスの初期セッティングを指定する。

local-addressremote-addressのフォーマットはアドレスファミリーに依存する:

  • - IPv4アドレスは4つの8ビット整数と1つの16ビット整数からなる5要素のベクター[a b c d p]で表され、それぞれ数値的なIPv4アドレスa.b.c.d、およびポート番号pに対応する。
  • - IPv6アドレスは9要素の16ビット整数ベクター[a b c d e f g h p]で表され、それぞれ数値的なIPv6アドレスa:b:c:d:e:f:g:h、およびポート番号pに対応する。
  • - ローカルアドレスはローカルアドレススペース内でアドレスを指定する文字列として表される。
  • - 未サポートファミリー(unsupported family)のアドレスはコンスセル(f . av)で表される。ここでfはファミリー名、avはアドレスデータバイトごとに1つの要素を使用するソケットアドレスを指定するベクター。可搬性のあるコードでこのフォーマットを信頼してはならない。これは実装定義の定数、データサイズ、データ構造のアライメントに依存する可能性があるからだ。
:nowait bool

ストリーム接続にたいしてboolが非nilなら、その接続の完了を待機せずにリターンする。接続の成功や失敗時には、Emacsは"open" (成功時)、または"failed" (失敗時)にマッチするような第2引数によりセンチネル関数を呼び出すだろう。デフォルトではwaitせずにblockするので、make-network-processはその接続が成功または失敗するまでリターンしない。

:stop stopped

stoppedが非nilならstopped(停止)の状態でネットワーク接続、またはサーバーを開始する。

:buffer buffer

プロセスバッファーとしてbufferを使用する。

:coding coding

このプロセスにたいするコーディングシステムとしてcodingを使用する。接続からのデータのデコードおよび接続への送信データのエンコードに異なるコーディングシステムを指定するには、codingにたいして(decoding . encoding)と指定する。

このキーワードをまったく指定しないかった場合のデフォルトは、そのデータからコーディングシステムを判断する。

:noquery query-flag

プロセスqueryフラグをquery-flagに初期化する。Query Before Exitを参照のこと。

:filter filter

プロセスフィルターをfilterに初期化する。

:filter-multibyte multibyte

multibyteが非nilならマルチバイト文字列、それ以外ならユニバイト文字列がプロセスフィルターに与えられるデフォルトはenable-multibyte-charactersのデフォルト値。

:sentinel sentinel

プロセスセンチネルをsentinelに初期化する。

:log log

サーバープロセスのlog関数をlogに初期化する。サーバーがクライアントからネットワーク接続をacceptするたびにそのlog関数が呼び出される。log関数に渡される引数はserverconnectionmessage。ここでserverはサーバープロセス、connectionはその接続にたいする新たなプロセス、messageは何が発生したかを説明する文字列。

:plist plist

プロセスplistをplistに初期化する。

実際の接続情報で修正されたオリジナルの引数リストはprocess-contactを通じて利用できる。