Sockets[Serve] - Maple サーバの確立
使い方
Serve(port, server)
パラメータ
port - 正の整数; サービスを利用可能としたいポート番号
server - Maple の手続き (または他の式); サービスとして用いる単独のリクエスト
|
説明
|
|
•
|
ユーザ独自の Maple サービスを確立するために、Serve コマンドを用いて、指定されたポート上にサーバを走らせることが可能です。このコマンドは2つの引数を必要とします: 1つはリクエストを聞く側のポート番号 port、もう1つは入ってくる単独のリクエストである Maple の手続き server です。Serve( port, server ) という呼び出しは、指定されるポート上でサービスを確立し(それを行う権限をもつことを仮定しています)、ポート上のリクエストを聞く用意をします。リクエストが到着すると、入ってくるリクエストのソケット ID を唯一の引数として持つ、コールバック server が呼び出されます。server 手続きは、サービスを提供し、エラーなしで返されます。
|
•
|
サービスが中断されると、server コールバック内で問題が提起され、Serve コールを発効する Maple の処理にまでその問題が伝達されます。
|
|
注意: ライセンスの理由により、Serve は本当のサーバを確立するものではありません; ユーザは、手動でその Maple のサーバ処理をバックグランドに起動しなくてはなりません。 また、同時に1つだけの入ってくるリクエストが扱われます。UNIX プラットフォーム上であっても、、新しい分岐や処理を個々のリクエストにサービスとして作成することはできません。
|
•
|
手続き Serve は、結果を求めて呼び出されますが、何の値も返しません。
|
•
|
開かれているソケットを調査するために ``netstat'' のようなシステムツールを使用する場合、リクエストを提供するサーバが終了した後で ``TIME_WAIT'' 状態の中に割り当てられた接続に注意が必要です。これは、TCP プロトコルの通常の結果で、接続が閉じられた後にも一定の期間(``maximum segment lifetime'、またはデフォルトの4分、の2つの場合)、割り当てられたソケットを``TIME_WAIT'' 状態の中に保持しています。ソケットが TIME_WAIT の状態にあるとき、オペレーティングシステムは、割り当てられたソケットアドレスで到着するネットワークパケットを古い接続と同じアドレスを持つ新しい接続には結び付けるのではなく、もとのソケットに結びつけます。さらに詳細な情報については、 RFC 761 (``Transmission Control Protocol'') Most modern TCP implementations use the so-called ``SYN->RCVD'' transition that allows the operating system to open a new connection directly from the TIME_WAIT state providing that certain conditions are met を参照して下さい。また、詳細については、RFC 1122 (``Requirements for Internet Hosts -- Communication Layers''), Section 4.2.2.13 も参照して下さい。
|
|
|
例
|
|
この例では、簡単な挨拶のサーバを示しています。
>
|
server := proc( sid )
use Sockets in
Write( sid, sprintf( "Hello %s on port %d, from %s\r\n",
GetPeerHost( sid ), GetPeerPort( sid ), GetHostName() ) )
end use
end proc:
|
以下の呼び出しでは、Maple のセッションにサービスのリクエスト開始を発効します。この呼び出しは、何も返しません。
>
|
Sockets:-Serve( 2525, server );
|
|
|
Download Help Document
Was this information helpful?