Q:

java socket timeout behaviour

If I set soTimeout on java sockets what will be the behaviour in case of active peer vs passive peer.  For instance if I have a readtimeout value 1 minute and having a file transfer and which takes 5 minutes will it get readtimeout exception or not ?  For me its necessary to get timeout exception when connection hangs.    

A:

The soTimeout setting explicitly affects operations that read from the socket's input stream.  You can think of it as allowing the caller to define a timed block on read operations.  From the Javadoc for setSoTimeout:

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
  java.net. SocketTimeoutException is raised, though the Socket is still
  valid. 

In the case of a passive peer, no timeout will be thrown solely due to the peer not calling read.  However, if and when it does make a read call, the call must return data before the soTimeout expires, or else a SocketTimeoutException will be raised.