我有一段相当简单的代码卡在java中。挂起是非常罕见的。也许每 1000 次执行一次。在设备上循环运行它似乎不会重现该问题。
long timeout = 10000;
long endTime = System.currentTimeMillis() + timeout + 5000;
Socket pingSocket = null;
String host = "host";
String port = "22";
do {
try {
pingSocket = new Socket();
pingSocket.bind(null);
pingSocket.connect(new InetSocketAddress(host, port), 5000);
if (pingSocket.isConnected()) {
pingSocket.close();
return true;
}
pingSocket.close();
}
catch (UnknownHostException e) {
throw e;
}
catch (IOException e) {
// All other errors are subclassed from IOException, and i want
// to ignore till after my spin period.
}
try {
Thread.sleep(SPIN_SLEEP_DELAY);
}
catch (InterruptedException e) {
return false;
}
} while (System.currentTimeMillis() <= endTime);
由于它在生产中很少发生,因此很难缩小导致问题的原因。我目前正在对代码进行检测,以便我们产品的下一个版本在发生这种情况时可以获得更多信息,但我想我会问是否有人见过简单的绑定(bind)/连接/isConnected/关闭挂起?
谢谢!
最佳答案
您是否在挂起期间生成了 Java 线程转储?这将告诉您代码中发生挂起的位置。
关于java - 简单的开放式 socket 很少挂,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2120265/