文档说Socket
的{{1}}方法
抛出SocketException - 如果底层协议中存在错误,例如TCP错误
你有过这个例外吗?使用TCP套接字时,什么样的TCP错误会导致此方法抛出异常?
修改:
让我尝试更具体,更深入。我不是在寻找可以在其他地方轻松找到的小事(例如,一个封闭的套接字会抛出此异常)。
假设刚刚创建,连接了setSoTimeout(int)
(表示TCP连接),但尚未关闭。我还没有对它进行任何读/写操作。我在Linux(Ubuntu Server 11.04)上运行,所以我们可以忘记TCP实现不支持读取超时的情况。
现在,在这种情况下可以抛出这个异常吗?如果是这样,这是什么意思?它是特定于当前Socket
实例的东西吗?如果我只是Socket
它并以某种方式获得一个新的,它应该工作吗?这是一个我无法恢复的更大问题(例如操作系统中的问题),应该更好地关闭我的应用程序吗?
答案 0 :(得分:2)
在这种情况下,如果套接字关闭或关闭,则抛出SocketException
。
它也可以抛出以指示由本机TCP堆栈实现生成的错误。例如,如果您使用的是Windows,那么setSoTimeout
可能会归结为Windows Winsock API中setsockopt
函数的调用。此方法中的错误将指示winsock子系统中的某些更深层次的问题(无法初始化),或者如果您尝试在套接字上进行阻塞操作(例如,另一个线程)时设置套接字选项,则也可能抛出此错误。因此,您应该努力在创建时仅修改套接字选项,避免在连接套接字并开始对其进行I / O操作后更改任何选项。
如果您感到好奇,可以阅读更多here。
答案 1 :(得分:0)