AcceptorTCPSocket (クラス)
public AcceptorTCPSocket {inherits TCPSocket, SocketEventTarget}
パッケージ: CURL.IO.SOCKET

着信 TCP 接続の所定ポートをリスニングするサーバー TCP ソケットのクラス。

プログラミング注意事項

AcceptorTCPSocket.bind が一旦呼び出された後に、所定のポートをリスニングするサーバを作成します。AcceptorTCPSocket.accept を介して、そのポートに着信する接続を許可します。

AcceptableSocketEvent を要求する EventHandlerAcceptorTCPSocket.defaultAcceptorTCPSocket.add-event-handler または AcceptorTCPSocket.bind にパスされると、接続は非同期に受け入られます。

コンストラクタ
default:ソケットを初期化します。実際にはバインドしませんが、AcceptorTCPSocket.bind 呼び出しのパラメータを設定できます。
コンストラクタ public {AcceptorTCPSocket.default
local-address:#SocketInetAddress = null,
local-port:uint16 = NetworkSocket.random-port,
local-name:#String = null,
local-port-name:#String = null,
timeout:Time = Socket.infinite-timeout,
reuse-address?:bool = false,
listen-backlog:int = AcceptorTCPSocket.default-listen-backlog,
acceptable-handler:#EventHandler = null
}

プロパティ
event-enabled?:self のイベントがモニタされる準備ができている場合は true を返します。
アクセサ public inline AcceptorTCPSocket.event-enabled?:bool
プロパティ 継承 NetworkSocket: _local-port, local-address, local-port, open?, reuse-address?, timeout
プロパティ 継承 DefaultIOEventTarget: doing-event-dispatch?, handlers, saved-event-classes, saved-event-classes-valid?, soonest-expiration
プロパティ 継承 EventTarget: event-handlers

クラス変数と定数
default-listen-backlog:AcceptorTCPSocket.set-listen-backlog の既定値。OS の上限などに相当します。
public constant AcceptorTCPSocket.default-listen-backlog:int =lowtcpsocket-listen-maxbacklog

メソッド
accept:新しい着信接続を受け取ります。
public {AcceptorTCPSocket.accept
timeout:Time = self.timeout
}:DataTCPSocket
add-event-handler:指定された型の IOEventEventHandler を追加または変更します (非タイムアウト クラスのみ。タイムアウト イベントには IOEventTarget.add-timeout-event-handler を使用します)。
public {AcceptorTCPSocket.add-event-handler
event-handler:EventHandler
}:void
add-timeout-event-handler:IOTimeoutEvent の特定のサブタイプの EventHandler を追加または変更します。
public {AcceptorTCPSocket.add-timeout-event-handler
event-handler:EventHandler,
timeout:Time
}:void
async-accept:ソケットの着信接続を非同期で許可し、各着信接続が許可された後や失敗やタイムアウトで AsyncAcceptSocketEventEventHandler へ伝えます。
public {AcceptorTCPSocket.async-accept
timeout:Time = self.timeout,
accept-count:int = -1,
event-handler:EventHandler,
...:EventHandler
}:AsyncWorker
bind:ローカル アドレスおよびポートにバインドします。パラメータは、AcceptorTCPSocket.default またはこの呼び出しで設定できます。
public {AcceptorTCPSocket.bind
local-address:#SocketInetAddress = self._local-address,
local-port:uint16 = self._local-port,
local-name:#String = null,
local-port-name:#String = null,
reuse-address?:bool = self.reuse-address?,
listen-backlog:int = self._listen-backlog,
acceptable-handler:#EventHandler = self.acceptable-handler
}:void
call-handler:これは、関連するハンドラを実際に呼び出すために呼び出されます。
protected {AcceptorTCPSocket.call-handler
event:IOEvent,
handler:EventHandler,
event-target:IOEventTarget,
now:#DateTimeData = null
}:void
close:ソケットを閉じます。
public {AcceptorTCPSocket.close}:void
impl-accept:新しい着信接続を受け取ります。
protected {AcceptorTCPSocket.impl-accept
socket:DataTCPSocket,
timeout:Time = self.timeout
}:void
set-listen-backlog:バックログを設定し、まだ AcceptorTCPSocket.accept の対象になっていない接続を OS が一度にいくつ保持できるかを示します。
public {AcceptorTCPSocket.set-listen-backlog backlog:int}:void
メソッド 継承 TCPSocket: ready-to-close?
メソッド 継承 SocketEventTarget: handlers-resize, private-add-event-handler
メソッド 継承 NetworkSocket: load-local-address-port
メソッド 継承 DefaultIOEventTarget: add-targeted-event-handler, begin-event-enabled, begin-using-handlers, end-event-enabled, end-using-handlers, enqueue-timeout, event-handler-present?, handle-event, handle-event-with-now, make-IOEvent, new-handlers, remove-event-handler, remove-event-handler-by-type, remove-targeted-event-handler, remove-targeted-event-handler-by-type, reset-event-handler-expiration, verify-event
メソッド 継承 EventTarget: accepts-event-class?
メソッド 継承 BasicEventTarget: enqueue-event
メソッド 継承 Object: object-describe, object-describe-for-debugging, object-serialize



コンストラクタ詳細
default (コンストラクタ)
public {AcceptorTCPSocket.default
local-address:#SocketInetAddress = null,
local-port:uint16 = NetworkSocket.random-port,
local-name:#String = null,
local-port-name:#String = null,
timeout:Time = Socket.infinite-timeout,
reuse-address?:bool = false,
listen-backlog:int = AcceptorTCPSocket.default-listen-backlog,
acceptable-handler:#EventHandler = null
}

ソケットを初期化します。実際にはバインドしませんが、AcceptorTCPSocket.bind 呼び出しのパラメータを設定できます。

local-address: バインド先のローカル アドレス。ソケットは local-address および local-name が提供されていない場合、IPv4 および IPv6 の任意のアドレスをバインドするので、通常 local-address は必要ありません。local-address または local-name が提供されている場合、ソケットはそのパラメータのアドレス ファミリーを使用できるインターフェースからの接続だけを受信することができます。
local-port: バインド先のローカル ポートを示す uint16 のキーワード。クライアントは、この AcceptorTCPSocket に達するには、同じポートを指定する必要があります。
local-name: バインド先のローカル アドレスを探すときに使用するホスト名を示す String のキーワード。既定で任意のローカル アドレスでの接続が許可されるので、通常は必要ありません。
local-port-name: バインド先のローカル ポートを探すときに使用するポートの名前を示す String のキーワード。
timeout: このクラスのこのインスタンスが作成するすべてのブロッキング呼び出しに適用される既定のタイムアウトを示す Time のキーワード。既定は無限、つまりブロッキングです。
reuse-address?: TIME_WAIT 状態にあるローカル アドレスとポート名の組み合わせの再使用を許可するかどうかを示す bool のキーワード (一部のシステムでは、他のあまり推奨できない場合での再使用も許可されている可能性があります)。既定値は false です。
listen-backlog: 受け取りを待つ接続数を示す int キーワード。OS によっては、上限を強制したり、指定より多い数を使用できる場合があります。既定は OS で設定されている上限です。詳細については AcceptorTCPSocket.set-listen-backlog も参照してください。
acceptable-handler: AcceptorTCPSocket.accept が呼び出され、着信接続が利用可能な時に呼び出される、AcceptableSocketEvent を要求するキーワードの EventHandlerAcceptorTCPSocket のリスニングを開始するために、AcceptorTCPSocket.bind が呼び出された後で呼び出されます。 acceptable-handler 内では、AcceptorTCPSocket.accept は、パラメータ timeout=Socket.zero-timeout と共に呼び出すか、または、既定のタイムアウトを Socket.zero-timeout に設定した後に呼び出します。このハンドラは、ソケットが閉じられた時に自動的に取り除かれます。EventHandler の作成法に関しては、on を参照してください。



プロパティ詳細
event-enabled? (アクセサ)
アクセサ public inline AcceptorTCPSocket.event-enabled?:bool

self のイベントがモニタされる準備ができている場合は true を返します。

注意事項

IOEventTarget コードによってのみ呼び出されます。



クラス変数と定数の詳細
default-listen-backlog (クラス定数)
public constant AcceptorTCPSocket.default-listen-backlog:int =lowtcpsocket-listen-maxbacklog

AcceptorTCPSocket.set-listen-backlog の既定値。OS の上限などに相当します。





メソッド詳細
accept (メソッド)
public {AcceptorTCPSocket.accept
timeout:Time = self.timeout
}:DataTCPSocket

新しい着信接続を受け取ります。

timeout: この呼び出しだけのタイムアウト値を指定するキーワード。指定時間内に何も起こらなかった場合は復帰します。

戻り値

受け取った接続の新しい DataTCPSocket。タイムアウトまたはエラーの場合は null です。

プログラミング注意事項

サーバーは、AcceptorTCPSocket.accept でループして、それぞれの着信接続を処理する必要があります。AcceptorTCPSocket.bind を呼び出した後で呼び出します。非同期で使用されている場合は、timeout0s または Socket.zero-timeout として渡しますが、使用可能な着信接続がない場合、AcceptorTCPSocket.acceptWouldBlockSocketException をスローする可能性があります。

オーバーライド

サブクラスはこの機能をオーバーライドして DataTCPSocket の適切なサブクラスを作成し、それを AcceptorTCPSocket.impl-accept に渡す必要があります。現在のコードは次のとおりです。let s:DataTCPSocket = {DataTCPSocket} {self.impl-accept s, timeout=timeout} {return s}


add-event-handler (メソッド)
public {AcceptorTCPSocket.add-event-handler
event-handler:EventHandler
}:void

指定された型の IOEventEventHandler を追加または変更します (非タイムアウト クラスのみ。タイムアウト イベントには IOEventTarget.add-timeout-event-handler を使用します)。

event-handler: イベントまたはタイムアウトが発生したときに呼び出されるルーチンを持つ EventHandler。呼び出し側は、呼び出しで EventHandler を作成できます。

戻り値

追加された EventHandler。このハンドラを追加して削除する場合、呼び出し側が別にオブジェクトを作成しなくてすむようにこの戻り値を保存できます。

オーバーライド

これは、DefaultIOEventTarget.handlers を使用します。


add-timeout-event-handler (メソッド)
public {AcceptorTCPSocket.add-timeout-event-handler
event-handler:EventHandler,
timeout:Time
}:void

IOTimeoutEvent の特定のサブタイプの EventHandler を追加または変更します。

event-handler: タイムアウト イベントが発生したときに呼び出されるルーチンを備えた EventHandler。呼び出し側は、呼び出しで EventHandler を作成できます。
timeout: このハンドラを呼び出す前に、アクティビティが発生せずに経過するタイムアウト期間の Time

戻り値

追加された EventHandler。このハンドラを追加して削除する場合、呼び出し側が別にオブジェクトを作成しなくてすむようにこの戻り値を保存できます。

オーバーライド

これは、DefaultIOEventTarget.handlers を使用します。


async-accept (メソッド)
public {AcceptorTCPSocket.async-accept
timeout:Time = self.timeout,
accept-count:int = -1,
event-handler:EventHandler,
...:EventHandler
}:AsyncWorker

ソケットの着信接続を非同期で許可し、各着信接続が許可された後や失敗やタイムアウトで AsyncAcceptSocketEventEventHandler へ伝えます。

timeout: 許可なしにこの時間が経過した場合、イベントが送られ、それ以上の許可は行われません。
accept-count: この async-accept 呼び出しで読み込まれるソケット接続の数です。既定は -1 ですが、これは永遠に許可し続けること、または失敗やタイムアウトが発生するまで許可し続けることを意味しています。
event-handler: AsyncAcceptSocketEvent を受け取る EventHandler。少なくとも 1 つを指定する必要があります。
...: AsyncAcceptSocketEvent を受け取るオプションの EventHandler

プログラミング注意事項

acceptable-handler は、設定された AcceptorTCPSocket で使用されるので、同時にこれを使用すべきではありません。
導入: バージョン 6.0


bind (メソッド)
public {AcceptorTCPSocket.bind
local-address:#SocketInetAddress = self._local-address,
local-port:uint16 = self._local-port,
local-name:#String = null,
local-port-name:#String = null,
reuse-address?:bool = self.reuse-address?,
listen-backlog:int = self._listen-backlog,
acceptable-handler:#EventHandler = self.acceptable-handler
}:void

ローカル アドレスおよびポートにバインドします。パラメータは、AcceptorTCPSocket.default またはこの呼び出しで設定できます。

プログラミング注意事項

AcceptorTCPSocket.accept の呼び出しの前に、呼び出す必要があります。これを呼び出した後で、クライアントは接続を開始できます。この呼び出しは 1 回だけ行ないます。

注意事項

ソケットは、この呼び出しが完了した時点で完全に設定されリスニングを開始します。適切なアドレスとポートへの接続はキューに入り、AcceptorTCPSocket.accept の呼び出しを待機します。
local-address: バインド先のローカル アドレス。ソケットは local-address および local-name が提供されていない場合、IPv4 および IPv6 の任意のアドレスをバインドするので、通常 local-address は必要ありません。local-address または local-name が提供されている場合、ソケットはそのパラメータのアドレス ファミリーを使用できるインターフェースからの接続だけを受信することができます。
local-port: バインド先のローカル ポートを示す uint16 のキーワード。クライアントは、この AcceptorTCPSocket に達するには、同じポートを指定する必要があります。
local-name: バインド先のローカル アドレスを探すときに使用するホスト名を示す String のキーワード。既定で任意のローカル アドレスでの接続が許可されるので、通常は必要ありません。
local-port-name: バインド先のローカル ポートを探すときに使用するポートの名前を示す String のキーワード。
reuse-address?: TIME_WAIT 状態にあるローカル アドレスとポート名の組み合わせの再使用を許可するかどうかを示す bool のキーワード (一部のシステムでは、他のあまり推奨できない場合での再使用も許可されている可能性があります)。既定値は false です。
listen-backlog: 受け取りを待つ接続数を示す int キーワード。OS によっては、上限を強制したり、指定より多い数を使用できる場合があります。既定は OS で設定されている上限です。詳細については AcceptorTCPSocket.set-listen-backlog も参照してください。
acceptable-handler: AcceptorTCPSocket.accept が呼び出され、着信接続が利用可能な時に呼び出される、AcceptableSocketEvent を要求するキーワードの EventHandlerAcceptorTCPSocket のリスニングを開始するために、AcceptorTCPSocket.bind が呼び出された後で呼び出されます。 acceptable-handler 内では、AcceptorTCPSocket.accept は、パラメータ timeout=Socket.zero-timeout と共に呼び出すか、または、既定のタイムアウトを Socket.zero-timeout に設定した後に呼び出します。このハンドラは、ソケットが閉じられた時に自動的に取り除かれます。EventHandler の作成法に関しては、on を参照してください。


call-handler (メソッド)
protected {AcceptorTCPSocket.call-handler
event:IOEvent,
handler:EventHandler,
event-target:IOEventTarget,
now:#DateTimeData = null
}:void

これは、関連するハンドラを実際に呼び出すために呼び出されます。

プログラミング注意事項

IOEventTarget.handle-event および DefaultIOEventTarget.enqueue-timeout によって呼び出されます。

オーバーライド

サブクラスが呼び出しを抑止する必要がある場合にはオーバーライドできますが、オーバーライド側はその呼び出しが抑止されない場合にさらに super.call-handler を呼び出す必要があります。


close (メソッド)
public {AcceptorTCPSocket.close}:void

ソケットを閉じます。

プログラミング注意事項

呼び出し側では、この呼び出しの後で Socket を何かに使用することはできません。SocketEventHandler を持つ場合、これらは close によって削除または無効にされます。Socket の状態は、close の呼び出し後にクリアされます。


impl-accept (メソッド)
protected {AcceptorTCPSocket.impl-accept
socket:DataTCPSocket,
timeout:Time = self.timeout
}:void

新しい着信接続を受け取ります。

socket: 着信接続を受け取る DataTCPSocket
timeout: この呼び出しだけのタイムアウト値を指定するキーワード。指定時間内に何も起こらなかった場合は復帰します。

プログラミング注意事項

実際に受け取りを行うために AcceptorTCPSocket.accept によって使用されます。クラスまたはサブクラスの外では使用されません。


set-listen-backlog (メソッド)
public {AcceptorTCPSocket.set-listen-backlog backlog:int}:void

バックログを設定し、まだ AcceptorTCPSocket.accept の対象になっていない接続を OS が一度にいくつ保持できるかを示します。

backlog: 適正なバックログ値の int

プログラミング注意事項

ソケットを閉じるまで、何回でも呼び出せます。

注意事項

OS によってはこの値が上下する場合がありますが、使用されている値をチェックする方法はありません。値が減らされた場合、OS が保持する AcceptorTCPSocket.accept の対象でない接続が切断される可能性があります。サーバーが適当な時間内に処理できる場合は大きい値でも問題ありませんが、そうでない場合は適切ではありません。