好奇心から、ThreadBlockingタイプの場合、TServerSocket / TClientSocketのどのイベントが発生しますか?
1 に答える
TClientSocketブロッキングモードでは、OnReadとを除くすべてのイベントが発生しOnWriteます。また、OnDisconnectクライアントがソケットの自身の端を閉じた場合にのみ、リモート切断でイベントがトリガーされません。これらのソケット状態を検出するのは、データの読み取り/書き込みを行うコードの責任です。TWinSocketStream.WaitForRead()可読性は、またはWinSockselect()関数を介して検出されます。書き込み可能性は、WinSockselect()関数を介してのみ検出されます。リモート切断は、最初に読み取り可能性を検出し、次に0TCustomWinSocket.ReceiveBuf()をTWinSocketStream.Read()返すことによって検出されます。
TServerSocketブロッキングモードでは、デフォルトですべてのイベントが発生します。TServerClientThreadただし、仮想メソッドをオーバーライドするクラスを派生し、イベントClientExecute()からそのクラスのインスタンスを返すと、イベントとイベントOnGetThreadが失われ、ブロッキングモードと同様のロジックを使用してこれらのソケット状態を検出する必要があります。OnReadOnWriteTClientSocket