understanding URLConnection.setReadTimeout()

lviggiani picture lviggiani · Jul 3, 2014 · Viewed 29.3k times · Source

Consider the following snippet:

URLConnection connection = target.openConnection();

connection.setConnectTimeout(5000); // 5 sec
connection.setReadTimeout(10000); // 10 sec

Does the connection.setReadTimeout sets the maximum time available for STARTING read data or is it the maximum time available for COMPLETING read data?

My understaning is that with that, java has 10 seconds to start reading the next byte of data from the connection. There is no timeout for finishing read all data from the connection as we do not know how big the strean may be. Is it correct?

Answer

Andrew_CS picture Andrew_CS · Jul 3, 2014

It is for "starting" read data. The timeout is there to set a limit on how long the wait is for incoming data. The timeout doesn't apply when there is data available for reading.

"If the timeout expires before there is data available for read, a java.net.SocketTimeoutException is raised."

Oracle Reference

In short - your understanding is correct.