Fix CTRL+C shutdown error with WebSocket connections#49
Open
Conversation
Adding CLAUDE.md with task information for AI processing. This file will be removed when the task is complete. Issue: #5
- Add GracefulShutdownService to handle application stopping event - Configure HostOptions with 30-second shutdown timeout - Register hosted service in dependency injection container - Handle graceful shutdown of WebSocket connections before timeout Fixes #5 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>'
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR fixes the unhandled exception that occurs when pressing CTRL+C to shutdown the GraphQL server while WebSocket connections are active.
Problem
When CTRL+C is pressed to shutdown the server, the following error occurs if clients are connected via WebSocket:
Root Cause
The ASP.NET Core host tries to gracefully shutdown within the default timeout period, but active WebSocket connections don't get properly closed before the timeout expires, causing the connections to be abruptly terminated.
Solution
This implementation provides graceful shutdown handling by:
HostOptions.ShutdownTimeoutto 30 seconds to allow more time for graceful shutdownGracefulShutdownServicethat hooks into theIHostApplicationLifetime.ApplicationStoppingeventChanges Made
GracefulShutdownServiceas a hosted serviceTechnical Details
The solution follows ASP.NET Core best practices for graceful shutdown:
IHostApplicationLifetimeto detect shutdown signalsTesting
The solution has been tested by building the project successfully without compilation errors.
References
Fixes #5
🤖 Generated with Claude Code