0

私は memcached に代わるものを書いていますが、c# (.net) の動作が c とは異なる点が 1 つあります。

netcat を使用してこのコマンドを送信すると:

echo version | nc localhost 11211

c バージョンの memcached に接続すると、応答が返され、netcat が接続を閉じます

C# バージョンで同じことを行うと、このループを使用しているため、接続は開いたままになります。

while (!Reader.EndOfStream && connection.Connected)
{
      ...
}

その瞬間、コードは Reader.EndOfStream からの値の取得にハングアップします - このプロパティは、何か他のものにロックされて待機している関数を呼び出しているようです

しかし明らかに、netcat がサーバーに他に何も送信しない場合でも、c# はまだストリームが実際には終了していないと「考えている」ため、netcat がハングアップし、接続を閉じるためにそれを強制終了する必要があります。これは望ましくない動作であり、なぜ発生するのかわかりません。memcached の c ライブラリと同じように、ストリームの実際の終了を確認する方法を知っている人はいますか? (つまり、クライアントがデータの送信を終了すると、それがわかっているので接続を閉じることができます)

4

0 に答える 0