System.Win.ScktComp.TServerWinSocket.OnClientConnect
Delphi
property OnClientConnect: TSocketNotifyEvent read FOnClientConnect write FOnClientConnect;
C++
__property TSocketNotifyEvent OnClientConnect = {read=FOnClientConnect, write=FOnClientConnect};
プロパティ
種類 | 可視性 | ソース | ユニット | 親 |
---|---|---|---|---|
event | public | System.Win.ScktComp.pas System.Win.ScktComp.hpp |
System.Win.ScktComp | TServerWinSocket |
説明
クライアントソケットがリスニングソケットによって受け入れられた接続を完了したときに発生します。
OnClientConnect イベントハンドラを記述すると,クライアントソケットが TServerClientWinSocket オブジェクトへのソケット接続を完了したときに特定の処理が行われるようにすることができます。サービスによっては,この時点でソケットが読み書きを開始します。
OnClientConnect が発生するまでの Windows サーバーソケットイベントの順番は以下のとおりです。
1 Windows ソケットがリスニングのためにオープンされる直前に,seListen 型の OnSocketEvent イベントが発生する。
2 リスニング Windows ソケットがリスニングキューにクライアント要求を受け取る。リスニングソケットが要求の 1 つを受け入れ,新しいソケット接続の Windows ソケットハンドルを受け取る。
3 リスニングソケットが OnGetSocket イベントを生成し,Windows ソケットハンドルに渡す。Windows ソケットハンドル用の TServerClientWinSocket オブジェクトが OnGetSocket イベントハンドラで作成されなかった場合は,Windows ソケットがそのオブジェクトを作成する。Windows ソケットはほかのクライアントの監視を続行する。
4 新しい TServerClientWinSocket オブジェクトを使用して,seAccept 型の OnSocketEvent イベントが発生する。
5 ServerType が stThreadBlocking で,キャッシュに利用可能なスレッドがない場合は,OnGetThread イベントが発生する。OnGetThread イベントハンドラがスレッドを作成しない場合は,Windows ソケットオブジェクトが TServerClientThread を作成する。
6 ServerType が stThreadBlocking の場合は,スレッドが実行を開始すると,OnThreadStart イベントが発生する。
7 クライアントが TServerClientWinSocket オブジェクトへの接続を完了し,OnClientConnect イベントが発生する。
Sender パラメータは,クライアント要求を受け取る TServerWinClient オブジェクトです。Socket パラメータは,クライアントソケットへの接続を確立する TServerClientWinSocket オブジェクトです。
メモ: ServerType が stThreadBlocking の場合は,OnClientConnect イベントハンドラ内のすべてのコードがスレッドセーフなコードであることを確認してください。GetClientThread メソッドを使用すると,スレッド固有の情報にアクセスできます。
メモ: 関連付けられている TServerWinSocket の OnClientConnect イベントハンドラを設定すると,関連付けられている TServerSocket の OnClientConnect イベントハンドラも設定されます。