socket java android tcp httpconnection

socket timeout java



ConnectionTimeout versus SocketTimeout (2)

Tengo un problema con una biblioteca que estoy usando. ¡Podría ser la biblioteca o podría ser que yo la use mal!

Básicamente, cuando hago esto (Tiempo de espera en milisegundos)

_ignitedHttp.setConnectionTimeout(1); // v short _ignitedHttp.setSocketTimeout(60000); // 60 seconds

No se genera ninguna excepción de tiempo de espera y funciona bien, sin embargo, cuando hago lo siguiente,

_ignitedHttp.setConnectionTimeout(60000); // 60 seconds _ignitedHttp.setSocketTimeout(1); // v short

Tengo una Excepción de Socket.

Entonces, mi pregunta es ¿por qué no puedo simular una excepción de conexión? ¿Estoy entendiendo mal la diferencia entre un socket y un tiempo de espera de conexión? La biblioteca está here (aún no se ha lanzado oficialmente).


Un tiempo de espera de conexión es la cantidad máxima de tiempo que el programa está dispuesto a esperar para configurar una conexión a otro proceso. En este punto, no está recibiendo ni publicando datos de aplicaciones, solo establece la conexión.

Un tiempo de espera de socket es el tiempo de espera cuando se esperan paquetes individuales. Es un concepto erróneo común que un tiempo de espera de socket es el tiempo de espera para recibir la respuesta completa. Por lo tanto, si tiene un tiempo de espera de socket de 1 segundo y una respuesta compuesta por 3 paquetes IP, donde cada paquete de respuesta tarda 0,9 segundos en llegar, con un tiempo total de respuesta de 2.7 segundos, no habrá tiempo de espera.


Un tiempo de espera de conexión solo se produce al iniciar la conexión TCP. Esto generalmente sucede si la máquina remota no responde. Esto significa que el servidor se ha cerrado, usted usó el nombre de IP / DNS incorrecto o la conexión de red al servidor está inactiva.

Un tiempo de espera del socket está dedicado a monitorear el flujo continuo de datos entrantes. Si el flujo de datos se interrumpe durante el tiempo de espera especificado, la conexión se considera bloqueada / interrumpida. Por supuesto, esto solo funciona con conexiones donde se reciben datos todo el tiempo.

Al establecer el tiempo de espera del socket en 1, esto requeriría que se reciban datos nuevos de milisegundos (¡suponiendo que lea el bloque de datos correctamente y el bloque sea lo suficientemente grande)!

Si solo la transmisión entrante se detiene durante más de un milisegundo, se está produciendo un tiempo de espera excedido.