在C#中正确处理“通过对等方重置连接”

时间:2012-08-06 19:23:17

标签: c# tcplistener

我正在此处c#示例https://github.com/coolaj86/fizzbuzz/blob/master/tcp-echo-csharp/Main.cs并针对netcat运行它。

当我使用 CTRL + C 退出netcat时,它会关闭套接字然后我

Unhandled Exception: System.Net.Sockets.SocketException: Connection reset by peer
  at System.Net.Sockets.Socket.EndReceive (IAsyncResult result) [0x00000] in <filename unknown>:0 
  at echo.AsynchronousSocketListener.ReadCallback (IAsyncResult ar) [0x00000] in <filename unknown>:0

在我使用的其他语言中,FIN表示为0字节的读取(或称为'FIN'或'end'等事件),但我修改了示例以打印出一条消息读取0个字节,我看不到任何消息。

如何处理关闭连接的客户端?

我正在寻找一个答案,例如“使用System.Net.Foo.Bar.CloseHandler()System.Net.Foo.Bar.ErrorHandler()”。

1 个答案:

答案 0 :(得分:1)

我不确定,但我认为没有办法优雅地做到这一点。因为如果连接正常关闭,您会收到有关客户端断开连接的通知。但是CTRL + C中断程序执行并不是这种情况。所以我建议你只是处理异常来解决这个问题。