是否有可能在IOException后面获得errno?

时间:2016-09-11 09:02:49

标签: java java-io

我正在使用Java中的套接字,当套接字被另一方关闭时,我可能会遇到以下异常:

java.io.IOException: Broken pipe
java.io.IOException: Connection reset by peer

在这种情况下,我知道连接已断开(即strerror(EPIPE)strerror(ECONNRESET)),我应该对此做些什么。其他错误可能有其他含义,我可能会继续使用套接字没有问题。

但是如果我在另一个语言环境下运行Java,错误可能会变成:

java.io.IOException: Datenübergabe unterbrochen (broken pipe)
java.io.IOException: Die Verbindung wurde vom Kommunikationspartner zurückgesetzt

第一条消息仍包含英文(C)消息,因此我可以匹配,但第二条消息不匹配。除了为我的库提供所有语言环境的反向strerror目录之外,还有什么方法可以找出此异常背后的错误吗?

3 个答案:

答案 0 :(得分:1)

你不需要知道。您需要稍微区分的唯一IOExceptionSocketTimeoutException。所有其他的,也可以说是一个,以及尤其是你提到的两个,对连接是致命的,所以唯一合理的做法是关闭套接字并忘记对等。

答案 1 :(得分:-1)

是的,这些IOExceptons中的每一个都是另一个的实例,这意味着您可以只进行instanceof检查,或使用getClass()来解析错误名称。 例如,失败的绑定是BindException

的实例

答案 2 :(得分:-1)

通常,您不会从java.io.IOException获得错误编号。

原因是Java运行的所有平台都没有一致的错误号。