Java socket timeout: How to set the timeout on a Java socket

Java socket FAQ: How do I set the timeout value on a Java socket? That is, when I’m trying to read data from a Java socket, and I’m not getting any response from the server, how do I make sure my code doesn’t get stuck at this point? (It needs to time out after several seconds.)

Java socket timeout

Answer: Just set the SO_TIMEOUT on your Java Socket, as shown in the following sample code:

String serverName = "localhost";
int port = 8080;

// set the socket SO timeout to 10 seconds
Socket socket = openSocket(serverName, port);

Here’s a quote from the Socket class Javadoc, specifically the Javadoc for this setSoTimeout method:

Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time.

If the timeout expires, a is raised, though the Socket is still valid. The option must be enabled prior to entering the blocking operation to have effect.

The timeout must be > 0. A timeout of zero is interpreted as an infinite timeout.

Setting the Java socket timeout in milliseconds

As shown in the example Java code above, whenever I deal with calls like this socket timeout setting that involve milliseconds, I write my code this way:


Some programmers give me grief about this, but I think it shows my intent, and it’s also easier for humans to read 10*1000 than it is something like 10000 or 100000.

Share it!

There’s just one person behind this website; if this article was helpful (or interesting), I’d appreciate it if you’d share it. Thanks, Al.

Add new comment

The content of this field is kept private and will not be shown publicly.

Anonymous format

  • Allowed HTML tags: <em> <strong> <cite> <code> <ul type> <ol start type> <li> <pre>
  • Lines and paragraphs break automatically.
By submitting this form, you accept the Mollom privacy policy.