しばらく前に、vb.net でいくつかの基本的な HTTP Web サーバーを作成しました。IO のブロックを回避しようとしたため、基本的に現在のすべての接続に対して 1 つのポーリング スレッドを作成しました。
While True
For Each oNetworkstream In lstNetworkstream
If oNetworkstream.DataAvailable Then
'Read from stream
End If
Next
End While
したがって、接続に新しいデータがあるときはいつでも、それを読み取ることができました。それ以外の場合は、すぐに次の接続を確認します。
今、私はhttpsでウェブサーバーを拡張しています。したがって、.Net SslStream クラスを使用しました。同じ原則を適用したい (すべてのストリームを読み取るための 1 つのポーリング スレッド)
.DataAvailable プロパティがないため、幅 .Length > 0 を試しましたが、これにより NotSupportedException が発生します (このストリームはシーク操作をサポートしていません)
Dim oSslStream As New SslStream(oStream, False)
oSslStream.AuthenticateAsServer(moCertificateKeyPair)
MsgBox(oSslStream.Length)
では、スレッドをブロックせずに、特定の復号化されたストリームに利用可能なデータがあるかどうかを判断するにはどうすればよいでしょうか?