¿Cuál es la diferencia entre la conexión y el tiempo de espera de lectura para sockets?


3 preguntas:

  1. ¿Cuál es la diferencia entre connection y read timeout para sockets?

  2. ¿Qué significa el tiempo de espera de conexión establecido en "infinito"? ¿En qué situación puede permanecer en un bucle infinitivo? ¿y qué puede desencadenar que el bucle infinito muera?

  3. ¿Qué significa leer tiempo de espera establecido en "infinito"? ¿En qué situación puede permanecer en un bucle infinitivo? y lo que puede desencadenar que el infinity-loop muere?

Author: James McMahon, 2010-06-18

2 answers

1) ¿Cuál es la diferencia entre la conexión y el tiempo de espera de lectura para los sockets?

El tiempo de espera de conexión es el tiempo de espera para hacer la conexión inicial; es decir, completar el handshake de conexión TCP. El tiempo de espera de lectura es el tiempo de espera en espera de leer datos1. Específicamente, si el servidor no envía un byte segundos después del último byte, se generará un error de tiempo de espera de lectura.

2) ¿Qué significa el tiempo de espera de conexión establecido en "infinito"? En ¿qué situación puede permanecer en un bucle infinitivo? ¿y qué puede desencadenar que el bucle infinito muera?

Significa que el intento de conexión puede bloquearse para siempre. No hay bucle infinito, pero el intento de conexión puede ser desbloqueado por otro hilo cerrando el zócalo. (Una llamada Thread.interrupt() también puede hacer el truco ... no estoy seguro.)

3) ¿Qué significa el tiempo de espera de lectura establecido en "infinito"? ¿En qué situación puede permanecer en un bucle infinito? ¿Qué puede desencadenar que el ¿bucle infinito para terminar?

Significa que una llamada a read en el flujo de sockets puede bloquearse para siempre. Una vez más no hay bucle infinito, pero el read puede ser desbloqueado por una llamada Thread.interrupt(), cerrando el socket, y (por supuesto) el otro extremo enviando datos o cerrando la conexión.


1 - No lo es ... como un comentarista pensó ... el tiempo de espera en cuanto tiempo un socket puede estar abierto, o inactivo.

 155
Author: Stephen C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-17 03:06:45

Estos son valores de tiempo de espera impuestos por JVM para el establecimiento de conexiones TCP y esperando la lectura de datos del socket.

Si el valor se establece en infinito, no esperará para siempre. Simplemente significa que JVM no tiene tiempo de espera y el sistema operativo será responsable de todos los tiempos de espera. Sin embargo, los tiempos de espera en el sistema operativo pueden ser muy largos. En alguna red lenta, he visto tiempos de espera de hasta 6 minutos.

Incluso si establece el valor de tiempo de espera para socket, puede que no funcione si el tiempo de espera código nativo. Podemos reproducir el problema en Linux conectándonos a un host bloqueado por firewall o desconectando el cable en switch.

El único enfoque seguro para manejar el tiempo de espera TCP es ejecutar el código de conexión en un subproceso diferente e interrumpir el subproceso cuando toma demasiado tiempo.

 7
Author: ZZ Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-18 13:07:29