この記事では、ソケット クラスの通知関数について説明します。 これらのメンバー関数は、重要なイベントをソケット オブジェクトに通知するためにフレームワークが呼び出すコールバック関数です。 通知関数は次のとおりです。
OnAccept: Accept を呼び出すことによって保留中の接続要求を受け入れることができることを、このリッスン ソケットに通知します。
OnConnect: 接続試行が完了したことをこの接続ソケットに通知します。おそらく正常に、またはエラーが発生している可能性があります。
OnClose: 接続されているソケットが閉じられたことをこのソケットに通知します。
注
追加の通知関数は OnOutOfBandData です。 この通知は、送信側ソケットに送信する "帯域外" データがあることを受信ソケットに通知します。 帯域外データは、接続されているストリーム ソケットの各ペアに関連付けられている論理的に独立したチャネルです。 帯域外チャネルは、通常、"緊急" データを送信するために使用されます。 MFC では、帯域外データがサポートされます。 クラス CAsyncSocket を使用する上級ユーザーは帯域外チャネルを使用する必要がある場合がありますが、 クラス CSocket のユーザーは使用しないことをお勧めします。 そのようなデータを渡すためには 2 番目のソケットを作成する方が簡単です。 帯域外データの詳細については、Windows SDK で入手できる Windows ソケットの仕様を参照してください。
クラス CAsyncSocket
から派生する場合は、アプリケーションに関連するネットワーク イベントの通知関数をオーバーライドする必要があります。 クラス CSocket
からクラスを派生させる場合は、目的の通知関数をオーバーライドするかどうかを選択します。
CSocket
自体を使用することもできます。その場合、通知関数は既定で何も実行しません。
これらの関数は、オーバーライド可能なコールバック関数です。
CAsyncSocket
メッセージ CSocket
通知に変換しますが、使用する場合は通知関数の応答方法を実装する必要があります。 通知関数は、読み取るデータの存在など、関心のあるイベントがソケットに通知されるときに呼び出されます。
MFC は通知関数を呼び出して、通知時にソケットの動作をカスタマイズできるようにします。 たとえば、OnReceive
通知関数からReceive
を呼び出します。つまり、読み取るデータがあることを通知されたら、Receive
を呼び出して読み取ります。 この方法は必要ありませんが、有効なシナリオです。 別の方法として、通知機能を使用して進行状況の追跡、 TRACE メッセージの出力などを行うことができます。
これらの通知を利用するには、派生ソケット クラスで通知関数をオーバーライドし、実装を提供します。
データの受信や送信などの操作中に、 CSocket
オブジェクトが同期になります。 同期状態では、現在のソケットが必要な通知を待機している間、他のソケット用の通知はすべてキューに入れられます。 (たとえば、 Receive
呼び出し中に、ソケットは通知を読み取る必要があります)。ソケットが同期操作を完了し、もう一度非同期になると、他のソケットがキューに登録された通知の受信を開始できます。
注
CSocket
では、OnConnect
通知関数は呼び出されません。 接続の場合は、 Connect
を呼び出します。この呼び出しは、接続が完了したときに返されます (正常またはエラー)。 接続通知の処理方法は、MFC 実装の詳細情報です。
各通知関数の詳細については、「MFC リファレンス」のクラス CAsyncSocket
の関数を 参照してください。 MFC サンプルのソース コードと情報については、「 MFC サンプル」を参照してください。
詳細については、以下を参照してください。