Setting Java Socket Timeouts

Oddly, Java's Socket library doesn't allow you to set the socket timeout directly in the constructor. Its important to note that there is no default so the socket will last forever (ish).

Note: The socket timeouts below apply to different situations: setSoTimeout applies to read timeouts. connect applies to connection establishment. At least that's how I read it.

I found two options, setting the option on the socket after creating one simplest (for me at least):
Socket s;

try {
s = new Socket( ip, port );
s.setSoTimeout( secs * 1000 ); // converts secs to ms

// do other stuff like get input stream and read it
}
catch ( SocketException se ) {
// catch timeout or other socket related error
}
catch ( Exception e ) {
// any other exception
}
The other option is creating a Socket object without any parameters then calling the connect method with timeout.

Here is a rough prototype since it seemed like pain to me but I was curious about the code:
Socket s = new Socket;

try {
s.connect( new InetSocketAddress( ip, port ), secs * 1000 );
}
catch ( SocketExpection se ) {
}
...snip...
I would guess there a whole load of exceptions that you would want to catch for both forms.

Take Care

Comments

Popular posts from this blog

Template Toolkit Debugging inside of Perl Dancer

BootstrapX clickover

Changing Dancer::Plugin::Ajax's content type