在某些情况下Swallow SocketExceptions可以吗?

时间:2010-05-14 08:22:08

标签: c# sockets

假设我编写了一个使用套接字类(TCP)连接到服务器的应用程序。如果我在读或写时遇到SocketException,那么显然我必须继续运行断开连接例程以将应用程序的状态更改为Disconnected。

但是如果我开始断开连接,当我正在清理时,会发生SocketException?

SocketException对我来说并不是什么意思,因为我本来要自己关闭套接字..所以可以吞下它吗?

我真的想知道这种情况的最佳做法是什么。

4 个答案:

答案 0 :(得分:2)

在某些情况下,例外是“正常”情况。如果我没记错的话,在某些协议(SMTP)中,客户端(可以)在准备就绪时断开连接而不发送正确的关闭命令。在服务器端,您随后会获得一个已知无害的异常。

但请确保您只丢弃特定位置的特定异常类型。

答案 1 :(得分:1)

您仍然需要吞下一些,尤其是在设计重试机制时。对?如果你没有吞下第一次失败,你怎么能初始化第二次尝试?

答案 2 :(得分:0)

我一直忽略套接字异常,包括.net套接字和WCF。

我异步发送调用的时间有一半,所以如果断开连接,我会在达到超时之前找不到它,此时我得到一个我忽略的超时异常。

答案 3 :(得分:0)

如果在断开连接时出现问题,那么套接字处于什么状态?在最坏的情况下,远程套接字将超时。你无法做任何事情来解决这种情况。

但正如Joe R所说,记录消息 - 这些异常也可能发生,因为Disconnect()被调用两次,这是你想知道的事情。 (编辑:不知道这是否会导致异常,但我希望你知道我的意思:P)