为什么java服务器套接字接受失败

时间:2012-07-08 04:50:03

标签: java sockets

在从socket.accept()中捕获IOException并关闭执行接受的线程时,我没有转储卡住的跟踪是愚蠢的......修复了这个问题后,我仍然想了解如何处理这种情况当这个叫barfs。

我的应用程序是一个经典的套接字服务器,接受数百个客户端,有时数千个。在accept()调用中,接受线程始终处于启动状态并被阻止。一旦被接受,就会启动单独的线程来完成这些工作,等等。没什么特别的。

问题是,当accept()失败时应该怎么做?这应该立即被视为永久性失败吗?我应该重试进入accept()一段时间并尝试通过吗?什么是最佳做法?通常是抛出IOException的原因是什么?

2 个答案:

答案 0 :(得分:1)

  1. 客户有责任重试连接失败。服务器应该只记录异常并继续返回“接受”。一般而言,服务器永远不会启动与客户端的连接。
  2. 从防火墙问题到文件句柄耗尽问题,抛出IOException的原因太多了。 IOException的消息应该揭示原因。

答案 1 :(得分:1)

我可以想到在accept()调用中抛出IOException的唯一原因是正在使用的端口或主机的网络配置错误。

您可能会等待一段时间,并假设系统管理员会注意到问题并进行修复。但如果在启动期间发生这种情况,那么应用程序可以通过“致命”错误消息进行救助将是一个好主意。