可能であれば、C# のusing
コンストラクトを使用して、使用後にストリームを「自動的に」破棄する必要があります。
using (var sslStream = new SslStream(stream, false))
{
// read from stream here...
}
ただし、後で使用するために SslStream を保持する場合は、手動で破棄する必要があります。
通常、ストリームを破棄すると、ストリームも閉じられます。このClose()
メソッドは、主に完全性のために存在するようです。.NET ソース コードをダウンロード (または逆コンパイラを使用) し、SslStream.cs
とその基本クラスAuthenticatedStream.cs
を調べて正確な動作を確認できます。
あなたの質問の残りの部分に答えるために -のコンストラクターの1つが2つのパラメーターを取ることを示すMicrosoftのMSDNサイトでSslStream
十分に文書化されています(あなたの例でも示されています)。最初のパラメータは内部ストリームです - あなたの例ではオブジェクトです。2 番目は、 というブール値です。あなたの例では、 を渡します。SslStream
NetworkStream
leaveInnerStreamOpen
false
質問している動作を決定するのは、この 2 番目の値true
です。パスすると、内側のストリームも閉じられます。false
の場合と同様にNetworkStream
、そのコンストラクターもブール値を取りますownsSocket
。これがtrue
(あなたの例のように)に設定されている場合、 NetworkStreamを破棄/閉じると socket も閉じられます。それ以外の場合は開いたままになります。
sslStream.Dispose()
したがって、サンプル コードの状態では、 と の両方を 呼び出す必要がありますstream.Dispose()
(ソケットは自動的に閉じられます)。
SslStream
ただし、のコンストラクターの2 番目のパラメーターをサンプル コードで に変更すると、 、、およびそのソケットを閉じるためにtrue
呼び出すことができます。sslStream.Dispose()
SslStream
NetworkStream