C#でのTCP/IP通信のReadTimeoutが2回目以降効かない
StreamReaderのタイムアウトについて教えて下さい。
以下のような形でStreamReaderに対してReadTimeoutの値を設定する
ことによって1分でReadLine()を抜けてくれます。
(例外:転送接続からデータを読み取れません: 接続済みの呼び出し先が
一定の時間を過ぎても正しく応答しなかったため、接続できませんでした。)
ただし、それは最初の一回だけで、2回めのReadLine()に入った以降
は直ぐに抜けて(タイムアウト値が効いていない)同じ例外が発生します。
以下にプログラムの抜粋を示します。
serverReader = new StreamReader(netStream, Encoding.UTF8);
serverReader.BaseStream.ReadTimeout = 60000; <=== 1分でタイムアウトに設定
// スレッド内の処理
private bool ProcessMessage(StreamReader reader)
{
lock (this) {
while (true) {
try {
string message = reader.ReadLine(); ===> 1回目は正しく1分でタイムアウトが発生する
if (message != null) {
ss = ParseMessage(message,this);
}
}
catch (Exception e) {
===> 1回目は正しく1分でタイムアウトが発生するのだが
===> 2回目以降は直ぐにReadLine() から抜けてしまう
if (IsKill) {
result = false;
break;
}
Thread.Sleep(50);
}
}
}
}
質問は2回目以降もこのReadTimeout 値が効くようにするのはどの様に
すれば良いのでしょうか?