0

我正在编写 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 库一样?(这意味着当客户端完成发送任何数据时,我知道并且我可以关闭连接)

4

0 回答 0