我正在使用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
目录之外,还有什么方法可以找出此异常背后的错误吗?
答案 0 :(得分:1)
你不需要知道。您需要稍微区分的唯一IOException
是SocketTimeoutException
。所有其他的,也可以说是一个,以及尤其是你提到的两个,对连接是致命的,所以唯一合理的做法是关闭套接字并忘记对等。
答案 1 :(得分:-1)
是的,这些IOExceptons中的每一个都是另一个的实例,这意味着您可以只进行instanceof
检查,或使用getClass()来解析错误名称。
例如,失败的绑定是BindException
答案 2 :(得分:-1)
通常,您不会从java.io.IOException
获得错误编号。
原因是Java运行的所有平台都没有一致的错误号。