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