非同期TCP/IPサーバーを使用しましたが、すべて正常に動作しますが、エラーまたはアプリケーションの強制終了のためにクライアントが切断されると、タイプIO.IOExceptionの例外のためにサーバーも閉じます。例外は次のサブで発生します。
Private Sub ReadCallback(ByVal result As IAsyncResult)
Try
Dim client As Client = TryCast(result.AsyncState, Client)
If client Is Nothing Then
Return
End If
'MsgBox(client.ClientID)
Dim networkStream As NetworkStream = client.NetworkStream
Dim read As Integer = networkStream.EndRead(result) **' ERRORS HERE!**
If read = 0 Then
Dim client As Client = TryCast(result.AsyncState, Client)
SyncLock Me.Clients
Me.Clients.Remove(Client.ClientID)
Return
End SyncLock
End If
次のコードは、クライアントがTCPサーバーから切断するとIO.IOExceptionをスローします。
Dim read As Integer = networkStream.EndRead(result) **' ERRORS HERE!**
それ以外の場合、IO.IOExceptionをキャッチすると、そもそもこれが例外を作成しないようにするにはどうすればよいですか。基本的に、このシナリオが発生したときにクライアントを削除したいと思います。現時点では、回避策としてIO.IOExceptionでクライアントを削除し、メソッドを再スローしました。むしろより良い方法だろう。