Java Socket不尊重连接超时

时间:2013-10-16 10:51:36

标签: java sockets tcp

我正在尝试手动处理套接字到服务器的连接超时。如果服务器在1秒内没有回复,我想知道并在之后再尝试3次。

以下是我的代码所依据的主要内容:

// tcpSocket was previously declared, instantiate it
tcpSocket = new Socket();
try {
    // try to connect with a 1-second timeout
    tcpSocket.connect(new InetSocketAddress(mRemoteAddr, mRemotePort), 1000);
} catch (SocketTimeoutException ex) {
    // retry here... omissis
}

当在1000毫秒内未接受第一个连接(例如,来自本地端口X)时,我确实得到SocketTimeoutException并且以下连接成功(在新的本地端口上,例如{{ 1}})。

但是当使用Wireshark阅读TCP软件包时,我可以看到,在3-6-9-etc秒后, Y连接会自动重试,作为新的 X 包已发送!我甚至尝试在SYN的{​​{1}}块中添加tcpSocket.close(),但如果连接未建立,则无法关闭(调用catch不会导致什么)。

据我所知,我所看到的错误行为(即自动重试连接)是正确的,当且仅当我没有在SocketTimeoutException方法中指定任何超时时。

这是一个错误,还是有什么我做错了?

0 个答案:

没有答案