У меня следующий код:
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class ScoketTimeoutMain
{
public static void main( String[] args )
{
Socket socket = new Socket();
InetSocketAddress address = new InetSocketAddress( "example.com", 81 );
final long l = System.currentTimeMillis();
try
{
socket.connect( address, 60000 );
}
catch( IOException aE )
{
aE.printStackTrace();
System.out.println( System.currentTimeMillis() - l );
}
}
}
Время ожидания соединения генерируется примерно через 21 секунду:
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.kulig.ScoketTimeoutMain.main(ScoketTimeoutMain.java:17)
21004
Я не понимаю, почему возникает исключение через 21 секунду вместо 60 секунд ,
=== РЕДАКТИРОВАТЬ ===
Если установить тайм-аут меньше 21 секунды, он будет работать правильно. Например:
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class ScoketTimeoutMain
{
public static void main( String[] args )
{
Socket socket = new Socket();
InetSocketAddress address = new InetSocketAddress( "example.com", 81 );
final long l = System.currentTimeMillis();
try
{
socket.connect( address, 2000 );
}
catch( IOException aE )
{
aE.printStackTrace();
System.out.println( System.currentTimeMillis() - l );
}
}
}
java.net.SocketTimeoutException: connect timed out
at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:85)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at com.kulig.ScoketTimeoutMain.main(ScoketTimeoutMain.java:17)
2002
Таким образом, происходит какое-то другое время ожидания. Я понятия не имею, что может вызвать это и как установить этот другой тайм-аут.