假设我编写了一个使用套接字类(TCP)连接到服务器的应用程序。如果我在读或写时遇到SocketException,那么显然我必须继续运行断开连接例程以将应用程序的状态更改为Disconnected。
但是如果我开始断开连接,当我正在清理时,会发生SocketException?
SocketException对我来说并不是什么意思,因为我本来要自己关闭套接字..所以可以吞下它吗?
我真的想知道这种情况的最佳做法是什么。
答案 0 :(得分:2)
在某些情况下,例外是“正常”情况。如果我没记错的话,在某些协议(SMTP)中,客户端(可以)在准备就绪时断开连接而不发送正确的关闭命令。在服务器端,您随后会获得一个已知无害的异常。
但请确保您只丢弃特定位置的特定异常类型。
答案 1 :(得分:1)
您仍然需要吞下一些,尤其是在设计重试机制时。对?如果你没有吞下第一次失败,你怎么能初始化第二次尝试?
答案 2 :(得分:0)
我一直忽略套接字异常,包括.net套接字和WCF。
我异步发送调用的时间有一半,所以如果断开连接,我会在达到超时之前找不到它,此时我得到一个我忽略的超时异常。
答案 3 :(得分:0)
如果在断开连接时出现问题,那么套接字处于什么状态?在最坏的情况下,远程套接字将超时。你无法做任何事情来解决这种情况。
但正如Joe R所说,记录消息 - 这些异常也可能发生,因为Disconnect()
被调用两次,这是你想知道的事情。 (编辑:不知道这是否会导致异常,但我希望你知道我的意思:P)