接続のセットアップと破棄
WSAAccept 関数を使用すると、アプリケーションは、着信接続要求を受け入れるかどうかを決定する前に、呼び出し元 ID やサービス品質などの呼び出し元情報を取得できます。 これは、アプリケーション指定の条件関数へのコールバックを使用して行われます。
WSAConnect 関数のパラメーターと WSAAccept の条件関数で指定されたユーザー間データは、この機能がサービス プロバイダーによってサポートされている場合、接続の確立中にピアに転送できます。
(これをサポートするプロトコルの場合)、接続の破棄時にエンドポイント間でユーザー データを交換することもできます。 ティアダウンを開始する終了は 、WSASendDisconnect 関数を呼び出して、これ以上データが送信されていないことを示し、接続のティアダウン シーケンスを開始できます。 特定のプロトコルの場合、ティアダウンの一部は、ティアダウン イニシエーターからの切断データの配信です。 リモート エンドが破棄を開始したことを通知した後 (通常はFD_CLOSEの指示によって)、切断データを受信するために WSARecvDisconnect 関数を呼び出すことができます (存在する場合)。
データを切断する方法を示すために、次のシナリオを検討してください。 クライアント/サーバー アプリケーションのクライアントの半分は、ソケット接続を終了する役割を担います。 終了と一致すると、サーバーで処理されたトランザクションの合計数が (切断データを使用して) 提供されます。 サーバーは、すべてのクライアントで処理したトランザクションの累積合計で応答します。 呼び出しと表示のシーケンスは、次のように発生する可能性があります。
クライアント側 | サーバー側 |
---|---|
(1) WSASendDisconnect を呼び出してセッションを終了し、トランザクション合計を指定します。 | |
(2) FD_CLOSE、戻り値が 0 の recv、または正常なシャットダウンが進行中であることを示す WSARecv からの WSAEDISCON エラーの戻り値を取得します。 | |
(3) WSARecvDisconnect を呼び出して、クライアントのトランザクションの合計を取得します。 | |
(4) すべてのトランザクションの累積総計を計算します。 | |
(5) WSASendDisconnect を呼び出して総計を送信します。 | |
(6) FD_CLOSE表示を受け取ります。 | (5a) closesocket を呼び出します。 |
(7) WSARecvDisconnect を呼び出して、トランザクションの累積総計を受信して格納します。 | |
(8) closesocket を呼び出す |
ステップ (5a) はステップ (5) に従う必要がありますが、ステップ (6)、(7)、または (8) とのタイミング関係がないことに注意してください。