我有一个 TCP 客户端流,正在通过异步调用 NetworkStream.BeginRead 读取(传递异步回调委托)。问题是检测连接何时断开。目前,如果连接被切断,BeginRead 调用就会消失在以太中 - 只是不会调用回调。如果应用程序在其关闭时尝试在流上发送,这确实会触发回调并且 NetworkStream.EndRead 会引发异常 - 这没关系 - 但如果没有发出发送,则应用程序只是处于黑暗中,不知道连接已关闭。
最初我看到 NetworkStream.ReadTimout 没有设置(即默认的 Timout.Infinite)——但是设置这个(比如 3000 毫秒)并没有帮助。[编辑:MSDN 文档明确指出,ReadTimeout 仅适用于同步读取调用而不是 asyn BeginRead - 我应该更早地检查一下:-(]
如何检测客户端连接失败?
我是否必须像这个 SO question中所示那样轮询底层套接字?
另外:当物理上重新建立连接时,回调仍然不会被调用——我们只是在以太中等待,直到我们尝试发送。