SocketException: Connection Reset

java.net.SocketException: Connection reset

Quick Answer

The remote server unexpectedly closed the connection. Implement retry logic and handle the disconnection gracefully.

Why This Happens

Connection reset means the remote peer sent a TCP RST packet, abruptly closing the connection. This can happen when the server crashes, times out, or rejects the connection. It also occurs when writing to a connection the server has already closed.

The Problem

Socket socket = new Socket("example.com", 8080);
// Server closes connection
InputStream in = socket.getInputStream();
in.read(); // SocketException: Connection reset

The Fix

int maxRetries = 3;
for (int attempt = 0; attempt < maxRetries; attempt++) {
    try (Socket socket = new Socket("example.com", 8080);
         InputStream in = socket.getInputStream()) {
        int data = in.read();
        break; // Success
    } catch (SocketException e) {
        if (attempt == maxRetries - 1) throw e;
        Thread.sleep(1000 * (attempt + 1)); // Backoff
    }
}

Step-by-Step Fix

  1. 1

    Identify the connection issue

    Check server logs to see why the connection was reset. Common causes: server restart, firewall timeout, load balancer limit.

  2. 2

    Check timeout settings

    Verify socket timeout settings. Set appropriate read and connect timeouts with setSoTimeout() and connect(addr, timeout).

  3. 3

    Add retry logic

    Implement retry with exponential backoff for transient connection failures, and use connection pooling for efficiency.

Got the actual stack trace?

Paste it into our free AI explainer to get the cause and the fix for your specific case — no signup, nothing to install.

Explain my error

Bugsly catches this automatically

Bugsly's AI analyzes this error pattern in real-time, explains what went wrong in plain English, and suggests the exact fix — before your users even report it.

Try Bugsly free