Setting a timeout for socket operations
Solution 1:
Use the Socket()
constructor, and connect(SocketAddress endpoint, int timeout)
method instead.
In your case it would look something like:
Socket socket = new Socket();
socket.connect(new InetSocketAddress(ipAddress, port), 1000);
Quoting from the documentation
connect
public void connect(SocketAddress endpoint, int timeout) throws IOException
Connects this socket to the server with a specified timeout value. A timeout of zero is interpreted as an infinite timeout. The connection will then block until established or an error occurs.
Parameters:
endpoint
- the SocketAddresstimeout
- the timeout value to be used in milliseconds.Throws:
IOException
- if an error occurs during the connectionSocketTimeoutException
- if timeout expires before connectingIllegalBlockingModeException
- if this socket has an associated channel, and the channel is in non-blocking modeIllegalArgumentException
- if endpoint is null or is a SocketAddress subclass not supported by this socketSince: 1.4
Solution 2:
You don't set a timeout for the socket, you set a timeout for the operations you perform on that socket.
For example socket.connect(otherAddress, timeout)
Or socket.setSoTimeout(timeout)
for setting a timeout on read()
operations.
See: http://docs.oracle.com/javase/7/docs/api/java/net/Socket.html
Solution 3:
You could use the following solution:
SocketAddress sockaddr = new InetSocketAddress(ip, port);
// Create your socket
Socket socket = new Socket();
// Connect with 10 s timeout
socket.connect(sockaddr, 10000);
Hope it helps!