c#SslStream的read()函数如何知道何时返回0?

时间:2017-10-27 17:00:42

标签: c# sockets sslstream

我在c#中设置了一个ssl客户端,目前正在采取措施确保套接字读取尽可能可靠。 SslStream.read()文档表明当没有更多数据要读取时它会返回0,这究竟是什么意思?如果有一些延迟,那么没有数据准备好被读取怎么办? SslStream.read()在返回0之前是否有内置超时,或者我应该添加一些重试以及在决定连接丢失之前不会有什么?

以下是我接收数据的基本工作流程。

ulong expected = 8;
int offset = 0;
int read = 0;
do
{
    read = sslStream.Read(buffer, offset, expected - offset);
    offset += read;
} while (offset != expected && read != 0);

expected = byte8toulong(buffer);
Array.Clear(buffer, 0, buffer.Length);
read = 0;
offset = 0;

do
{
    // The same as above but saving the data as it comes in.
} while(offset != expected && read != 0);

所以我想我的问题是在什么情况下阅读== 0?滞后会导致它返回0吗?我是否应该添加一个计时器/重试,直到我对连接已经满足或者Read()已经做了类似的事情?

1 个答案:

答案 0 :(得分:-3)

套接字读取或写入应始终能够捕获异常(服务器端或客户端连接断开),将其包装在try catch中。

如果收到0则继续读取,因为这并不表示任何一方断开连接,直到您愿意设置某种超时。 (例外将处理大部分内容)但即使服务器连接断开,客户端连接也可以保持打开状态,即使客户端关闭,服务器连接也可以保持打开状态。