Next: Network Options, Up: Low-Level Network [Contents][Index]
make-network-process
ネットワーク接続やネットワークサーバーを作成する基本的な関数はmake-network-process
です。これは与えられた引数に応じて、これらの仕事のいずれかを行うことができます。
この関数はネットワーク接続やサーバーを作成して、それを表すプロセスオブジェクトをリターンする。引数argsはキーワード/引数のペアからなるリスト。キーワードの省略は:coding
、:filter-multibyte
、:reuseaddr
を除いて、常に値としてnil
を指定したのと同じことになる。重要なキーワードを以下に示す(ネットワークオプションに対応するキーワードを以降のセクションにリストする)。
プロセス名として文字列nameを使用する。一意にするために必要に応じて変更され得る。
コミュニケーションのタイプを指定する。値nil
はストリーム接続(デフォルト)、datagram
はデータグラム接続、seqpacket
は“シーケンスパケットストリーム(sequenced
packet stream)”による接続を指定する。接続およびサーバーの両方で、これらのタイプを指定できる。
server-flagが非nil
ならサーバー、それ以外なら接続を作成する。ストリームタイプのサーバーではserver-flagはそのサーバーへの保留中の接続キューの長さを指定する整数を指定できる。キューのデフォルト長は5。
接続するホストを指定する。hostはホスト名かインターネットアドレスを表す文字列、またはローカルホストを表すシンボルlocal
であること。サーバーのときにhostを指定する場合には有効なローカルホストのアドレスを指定しなければならず、そのアドレスに接続するクライアントだけが受け入れられるだろう。
serviceは接続先のポート番号、またはサーバーにたいしてはlistenするポート番号。これはポート番号に変換されるようなサービス名、または直接ポート番号を指定する整数であること。サーバーにたいしてはt
も指定でき、これは未使用のポート番号をシステムに選択させることを意味する。
familyは接続のアドレス(またはプロトコル)のファミリーを指定する。nil
は与えられたhostとserviceにたいして自動的に適切なアドレスファミリーを決定する。local
はUnixのsocketを指定して、この場合にはhostは無視される。ipv4
とipv6
はそれぞれIPv4とIPv6の使用を指定する。
サーバープロセスではlocal-addressはlistenするアドレスである。これはfamily、host、serviceをオーバーライドするので、これらを指定しないこともできる。
接続プロセスではremote-addressは接続先のアドレス。これはfamily、host、serviceをオーバーライドするので、これらを指定しないこともできる。
データグラムサーバーではremote-addressはリモートデータグラムアドレスの初期セッティングを指定する。
local-addressとremote-addressのフォーマットはアドレスファミリーに依存する:
[a b c
d
p]
で表され、それぞれ数値的なIPv4アドレスa.b.c.d、およびポート番号pに対応する。
[a b c d e
f g h
p]
で表され、それぞれ数値的なIPv6アドレスa:b:c:d:e:f:g:h、およびポート番号pに対応する。
(f
.
av)
で表される。ここでfはファミリー名、avはアドレスデータバイトごとに1つの要素を使用する、ソケットアドレスを指定するベクターである。可搬性のあるコードでこのフォーマットを信頼してはならない。これは実装定義の定数、データサイズ、データ構造のアライメントに依存する可能性があるからだ。
ストリーム接続にたいしてboolが非nil
なら、その接続の完了を待機せずにリターンする。接続の成功や失敗時には、Emacsは"open"
(成功時)、または"failed"
(失敗時)にマッチするような第2引数によりセンチネル関数を呼び出すだろう。デフォルトではwaitせずにblockするので、make-network-process
はその接続が成功または失敗するまでリターンしない。
stoppedが非nil
なら、“stopped”の状態でネットワーク接続、またはサーバーを開始する。
プロセスバッファーとしてbufferを使用する。
このプロセスにたいするコーディングシステムとしてcodingを使用する。接続からのデータのデコードおよび接続への送信データのエンコードに異なるコーディングシステムを指定するには、codingにたいして(decoding
. encoding)
と指定する。
このキーワードをまったく指定しないかった場合のデフォルトは、そのデータからコーディングシステムを判断する。
プロセスqueryフラグをquery-flagに初期化する。Query Before Exitを参照のこと。
プロセスフィルターをfilterに初期化する。
multibyteが非nil
ならマルチバイト文字列、それ以外ならユニバイト文字列がプロセスフィルターに与えられるデフォルトはenable-multibyte-characters
のデフォルト値。
プロセスセンチネルをsentinelに初期化する。
サーバープロセスのlog関数をlogに初期化する。サーバーがクライアントからネットワーク接続をacceptするたびにそのlog関数が呼び出される。log関数に渡される引数はserver、connection、message。ここでserverはサーバープロセス、connectionはその接続にたいする新たなプロセス、messageは何が発生したかを説明する文字列。
プロセスplistをplistに初期化する。
実際の接続情報で修正されたオリジナルの引数リストはprocess-contact
を通じて利用できる。