我正在尝试手动处理套接字到服务器的连接超时。如果服务器在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
方法中指定任何超时时。
这是一个错误,还是有什么我做错了?