Você simplesmente tem que fazer isso
OkHttpClient client = new OkHttpClient();
client.setConnectTimeout(15, TimeUnit.SECONDS); // connect timeout
client.setReadTimeout(15, TimeUnit.SECONDS); // socket timeout
Request request = new Request.Builder().url(url).build();
Response response = client.newCall(request).execute();
Esteja ciente de que valor definido no setReadTimeouté o utilizado em setSoTimeoutna Socketinternamente na OkHttp Connectionclasse.
Não definir nenhum tempo limite no OkHttpClienté o equivalente a definir um valor de 0on setConnectTimeoutou setReadTimeoute resultará em nenhum tempo limite. A descrição pode ser encontrada aqui .
Como mencionado por @marceloquinta nos comentários setWriteTimeouttambém pode ser definido.
A partir da versão 2.5.0, os valores de tempo limite de leitura / gravação / conexão são definidos para 10 segundos por padrão, conforme mencionado por @ChristerNordvik. Isso pode ser visto aqui .
A partir do OkHttp3, agora é possível fazer isso através do Builder da seguinte maneira
client = new OkHttpClient.Builder()
.connectTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.readTimeout(30, TimeUnit.SECONDS)
.build();
Você também pode ver a receita aqui .