2010-05-14 44 views
3

假设我编写了一个使用Socket类(TCP)连接到服务器的应用程序。如果在读取或写入时遇到SocketException,那么显然我必须继续并运行断开例程以将应用程序的状态更改为断开连接。在某些情况下吞食SocketExceptions可以吗?

但是如果我已经开始断开连接,并且在清理时发生了SocketException,那该怎么办呢?

SocketException对我来说并不意味着什么,因为无论如何我都会自己关闭套接字。所以可以吞咽它吗?

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

+0

比方说,我即将关闭套接字,但其中一个读取/发送调用将获得一个“异常连接重置”的SocketException或类似的东西。我吞下它吗? – NoPyGod 2010-05-14 09:01:27

+0

还是要看。如果你只是写一个“再见......”,没有什么可担心的。但是如果你发送了一些必要的东西,一个例外是一个错误。 – 2010-05-21 05:54:33

回答

0

我一直忽略套接字例外,都使用.net套接字和WCF。我发送呼叫的时间有一半是异步发送的,所以如果发生断开连接,直到超时命中为止,我才发现它,在这段时间,我得到了一个我忽略的超时异常。

0

如果断开连接时出现问题,那么套接字将处于什么状态?在最坏的情况下,远程套接字将超时。确实没有任何事情可以解决这种情况。

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

2

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

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

1

你仍然需要吞下一些,特别是当你设计一个重试机制时。对?如果你没有吞下第一次失败,你如何初始化第二次尝试?

相关问题