Skip to content

fix(server): silence EPIPE/ECONNRESET in accept loop#349

Open
fuleinist wants to merge 1 commit into
socketry:mainfrom
fuleinist:main
Open

fix(server): silence EPIPE/ECONNRESET in accept loop#349
fuleinist wants to merge 1 commit into
socketry:mainfrom
fuleinist:main

Conversation

@fuleinist
Copy link
Copy Markdown

Resolves #333 — silences expected client-disconnect errors that otherwise flood logs with false alarms.

Problem

When a client disconnects mid-response (e.g. browser navigation, WebSocket teardown, ALB health-check timeout), the Async task runner logs:

Task may have ended with unhandled exception.
Errno::ECONNRESET: Connection reset by peer

This is particularly noisy with Hotwire/Turbo Drive, where every client-side navigation aborts the previous response.

Fix

Rescues Errno::EPIPE and Errno::ECONNRESET inside the track{} block in Falcon::Server#accept. These are not actionable errors — the client is simply gone. All other exceptions continue to bubble up normally.

Testing

The fix can be verified by rapidly navigating between pages in a Falcon-based app with Hotwire/Turbo Drive enabled — the console should no longer show the unhandled-exception warnings for normal client disconnects.

resolves socketry#333

When a client disconnects mid-response (e.g. browser navigation,
WebSocket teardown, ALB health-check timeout), Async::HTTP::Server#accept
raises Errno::EPIPE or Errno::ECONNRESET. These bubble up through the
Async task runner and are logged as 'Task may have ended with unhandled
exception.' by the runtime.

These are expected, harmless disconnects — the client is simply gone.
The fix rescues these two specific errors inside the track{} block so
they propagate no further. All other exceptions continue to bubble up
normally.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Errno::EPIPE / Errno::ECONNRESET in accept loop logged as unhandled exceptions

1 participant