我有一个TCP客户端流正在通过异步调用NetworkStream.BeginRead读取(传递异步回调委托)。问题是检测连接何时关闭。目前,如果连接被切断,则BeginRead调用只会消失在以太网中 - 回调不会被调用。如果应用尝试在流上发送,而其 触发回调,而NetworkStream.EndRead会抛出异常 - 这没关系 - 但如果没有发出发送,那么应用只是处于黑暗中连接已关闭。
最初我看到没有设置NetworkStream.ReadTimout(即默认为Timout.Infinite) - 但设置此值(比如说,3000毫秒)并没有帮助。 [编辑:MSDN doc明确指出ReadTimeout仅适用于同步Read调用而不是asyn BeginRead - 我应该在之前更仔细地检查:-(]
如何检测客户端连接失败?
我是否必须轮询底层套接字,如this SO question?
所示此外:当物理上重新建立连接时,回叫仍然没有被调用 - 我们只是等待以太等待,直到我们尝试发送。
答案 0 :(得分:0)
我最终不得不从TcpClient async BeginRead
更改为同步Read
,并在专用读取Thead上超时。
这使我能够在由于流上没有数据而拉出超时时引发事件。