Vardhaman
Vardhaman

Reputation: 909

How to set timeout on client socket connection?

I am trying to set the timeout of a connection on the client socket in Java. I have set the connection timeout to 2000 milliseconds, i.e:

this.socket.connect(this.socketAdd, timeOut);

This I am trying on a web application. When a user makes a request, I am passing values to socket server, but if I don't receive any response in 5 secs the socket should disconnect.

But in my case the whole request is getting submitted once again. Can any one please tell me where am I going wrong?

I want to cut the socket connection, if I don't get any response in 5 secs. How can I set it? Any sample code would help.

Upvotes: 44

Views: 104568

Answers (3)

xyz
xyz

Reputation: 2160

You can try the follwoing:

Socket client = new Socket();   
client.connect(new InetSocketAddress(hostip, port_num), connection_time_out); 

Upvotes: 63

anisbet
anisbet

Reputation: 2672

To put the whole thing together:

Socket socket = new Socket();
// This limits the time allowed to establish a connection in the case
// that the connection is refused or server doesn't exist.
socket.connect(new InetSocketAddress(host, port), timeout);
// This stops the request from dragging on after connection succeeds.
socket.setSoTimeout(timeout);

Upvotes: 38

Jim Morris
Jim Morris

Reputation: 2890

What you show is a timeout for the connection, this will timeout if it cannot connect within a certain time.

Your question implies you want a timeout for when you are already connected and send a request, you want to timeout if there is no response within a certain amount of time.

Presuming you mean the latter, then you need to timeout the socket.read() which can be done by setting SO_TIMEOUT with the Socket.setSoTimeout(int timeout) method. This will throw an exception if the read takes longer than the number of milliseconds specified. For example:

this.socket.setSoTimeout(timeOut);

An alternative method is to do the read in a thread, and then wait on the thread with a timeout and close the socket if it timesout.

Upvotes: 20

Related Questions