Diagnóstico
Qué significa Connection reset
java.net.SocketException: Connection reset aparece cuando Java intenta leer, escribir o reutilizar una conexión que ha sido cortada. Puede venir del servidor, de un proxy, de una conexión stale del cliente, de una política de firewall, de TLS o de un timeout mal configurado.
Lo importante es no tratarlo como un error único. El mismo mensaje puede aparecer en un cliente HTTP que reusa conexiones, en un socket propio que escribe demasiado tarde o en una app que habla con un servicio que cierra conexiones bajo carga.
Ordena las primeras pruebas
Causas típicas y cómo confirmarlas
| Señal | Hipótesis | Prueba útil |
|---|---|---|
| Falla al leer respuesta | Servidor o proxy cierra antes de terminar | Comparar con curl/Postman y logs del servidor |
| Falla solo a veces | Conexión reutilizada stale o red intermedia | Desactivar pool temporalmente o registrar conexión/retry |
| Falla con payload grande | Límite de tamaño, proxy o timeout de lectura | Enviar payload mínimo y revisar status del servidor |
| Falla siempre al conectar | Host, puerto, TLS, firewall o protocolo equivocado | Probar DNS, puerto y handshake TLS por separado |
| Pasa en Minecraft o cliente externo | Red local, servidor remoto, mods o versión | Separar prueba en otra red y otro servidor |
Ejemplo de registro mínimo
try {
HttpResponse<String> response = client.send(request, BodyHandlers.ofString());
System.out.println(response.statusCode());
} catch (SocketException e) {
logger.warn("Connection reset host={} method={} timeout={} requestId={}",
request.uri().getHost(), request.method(), timeout, requestId, e);
throw e;
}
El objetivo no es capturar y olvidar la excepción. Guarda el contexto que permite comparar fallos: host, método, timeout, tamaño aproximado del cuerpo, request-id y si la operación se puede repetir sin duplicar efectos.
Ruta de diagnóstico segura
- Anota si el fallo ocurre al conectar, escribir o leer.
- Reproduce la misma petición con otra herramienta para separar cliente Java de servidor.
- Configura timeouts finitos de conexión y lectura; evita timeouts infinitos.
- Registra request-id o correlación para buscar el mismo evento en logs del servidor.
- Reintenta solo operaciones idempotentes y con límite de intentos.
- Si usas pool de conexiones, prueba temporalmente sin reutilización para detectar conexiones stale.
Soluciones que suelen empeorar el problema
- Atrapar SocketException y devolver éxito.
- Añadir un bucle de retry sin límite ni backoff.
- Subir timeouts sin medir si el servidor ya cerró la conexión.
- Culpar a Java sin comprobar proxy, TLS, firewall o logs del otro extremo.
- Reintentar operaciones de escritura que pueden duplicar pagos, pedidos o cambios.
Connection reset no siempre es connection reset by peer
En muchos entornos el mensaje exacto no basta para asignar culpable. A veces el cierre lo inicia el servidor; otras veces el cliente intenta reutilizar una conexión que ya no es válida; otras el reset aparece por un proxy o balanceador entre medias.
Por eso la guía práctica es observar el momento del fallo. Si la conexión se cae antes de enviar datos, mira red y TLS. Si cae al leer, mira servidor, timeout y payload. Si cae solo tras periodos de inactividad, revisa pooling y keep-alive.
Preguntas frecuentes
¿Connection reset significa que mi código está mal?
No necesariamente. Puede ser código, servidor, proxy, red, TLS o una conexión reutilizada que ya no sirve.
¿Debo reintentar siempre?
Solo si la operación es idempotente o tienes una clave que evita duplicados. Limita intentos y registra el motivo.
¿Un timeout mayor lo arregla?
A veces ayuda, pero también puede ocultar que el otro extremo cierra la conexión. Primero mide dónde se corta.
¿Cómo lo separo de un error HTTP?
Si recibes un status HTTP, la conexión llegó a responder. Si salta SocketException antes, el problema está en transporte o reutilización.
Fuentes consultadas
Fuentes y referencias
Consulta referencias útiles para ampliar o contrastar esta guía.
Siguiente lectura
Guias relacionadas para continuar
Si quieres seguir con el mismo tema, aqui tienes paginas cercanas que amplian la tecnica, comparan variantes o te llevan a la siguiente rutina.