对于未连接和绑定(bind)的 DatagramSocket,接收方法调用(禁用 SO_TIMEOUT)意外失败并出现以下异常。

java.net.SocketException: socket closed
 at java.net.PlainDatagramSocketImpl.receive0(Native Method)
 at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
 at java.net.DatagramSocket.receive(DatagramSocket.java:712)

另外我没有明确关闭套接字。
此错误发生在带有 JRE-6 的 Windows Server 2008 中。

即使在调用 DatagramSocket.close() 时,在相同的套接字地址重新创建一个新的 DatagramSocket 也失败了。

你能告诉我错误的可能原因吗?

最佳答案

我遇到了同样的问题。
检查套接字的“关闭”和“连接状态”字段。

/*
 * Connection state:
 * ST_NOT_CONNECTED = socket not connected
 * ST_CONNECTED = socket connected
 * ST_CONNECTED_NO_IMPL = socket connected but not at impl level
 */
static final int ST_NOT_CONNECTED = 0;
static final int ST_CONNECTED = 1;
static final int ST_CONNECTED_NO_IMPL = 2;

关于java - DatagramSocket.receive() 因意外的 SocketException 而失败,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4463556/

10-10 15:57