NetworkStream.ReadTimeout无法正常工作?

问题描述

我正在使用System.Net.sockets.NetworkStream与服务器应用程序对话。 初始化:

var socket = new Socket(System.Net.sockets.AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.IOControl(IOControlCode.KeepAliveValues,keepAliveBytes,null); //where bytes are calculated based on OnOff = 1,KeepAliveTime = 120000,KeepAliveInterval = 10000
socket.Connect(server_endpoint);
socket.NoDelay = true;
socket.ReceiveBufferSize = /*65kb*/; 
socket.SendBufferSize = /*65kb*/;

var stream = new NetworkStream(socket,true);
stream.ReadTimeout = 750; // I expect triggering exception each time when this value is exceeded
// Configure 1000 ms delay on the server side
stream.ReadBytes(messageSizeBytes,4,cancellationToken); // I expect IOException here since the ReadTimeout is 750 but the server delay was 1000

但有时不会发生。我已通过stopwatch进行验证:

Stopwatch stop = Stopwatch.StartNew();
_stream.ReadBytes(messageSizeBytes,cancellationToken);
stop.Stop();

服务器触发所需的延迟。我看到了这个结果:

1. The whole stream.ReadBytes duration => 1001.8625
2. The configured ReadTimeout in this line => 750
3. The exceeded time (without exception) => 1001.8625 - 750 = 251.8625

所以,我的问题是这是否是预期的。如果不是这样,为什么会出现这种情况?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)