我正在编写memcached的替代方法,但我发现c#(。net)在一件事情上的行为与c不同。
当我使用netcat发送此命令时:
echo version | nc localhost 11211
到memcached的c版本我得到一个响应并且netcat关闭了连接
当我对我的c#版本执行相同操作时,连接保持打开状态,因为我正在使用此循环:
while (!Reader.EndOfStream && connection.Connected)
{
...
}
在那一刻,代码挂起来从Reader.EndOfStream获取值 - 这个属性似乎调用了一些锁定到其他东西并等待的函数
但很明显,即使netcat不会向服务器发送任何其他内容,c#仍然“认为”该流没有真正结束,所以netcat挂断了我需要将其终止才能关闭连接。这是不受欢迎的行为,我不知道它为什么会发生。有谁知道如何检查流的真实结束,就像memcached中的c库一样? (这意味着当客户端完成发送任何数据时,我知道它并且我可以关闭连接)