Java Socket在异常后变得无法使用

时间:2011-08-09 11:07:54

标签: java sockets networking winsock

问题

在桌面网络应用程序中,有时会发送数据到DatagramSocket:

java.net.SocketException: No buffer space available (maximum connections reached?): Datagram send failed

在此异常后,套接字完全无法使用:它不会收到任何内容,send()会无限期挂起。再现测试是一个简单的应用程序(创建套接字,绑定,而(true)发送();)

只有在我的机器进入睡眠模式然后再回到“密集数据流”的中间时,我才能在100%的情况下重复这种行为。

问题

  1. 这是bsd套接字的正常行为 - 在发生错误后无法使用?或者它是一种WSA错误?
  2. 有没有办法将故障套接字“重置”到工作状态或重新打开套接字是唯一的解决方案?
  3. 是否可以在捕获异常后将这些条件与常规I / O错误(即可恢复的错误)区分开来?
  4. 当我在应用程序中重新打开套接字时,是否有任何一般性指导/建议(我的意思是:网络地址已更改,PC睡眠/唤醒和其他事件)
  5. 谢谢! :)

2 个答案:

答案 0 :(得分:1)

我认为假设套接字不再可用是安全的,如果读取或写入套接字导致抛出异常。在这种情况下,您期望会出现哪种可恢复的I / O错误?

答案 1 :(得分:1)

除了SocketTimeoutException之外,套接字在任何异常之后都不可用。