Fixes for Kludex/uvicorn
Verified fixes and incident notes extracted from GitHub Issues for Kludex/uvicorn.
Repository
Kludex / uvicorn
Updated: 2026-02-13
- Error using websockets==4.0.1
- Catch `HttpParserInvalidMethodError` exception
- Error while closing socket [Errno 9] Bad file descriptor
- Uvicorn does not respect gunicorn's keepalive timeout
- Reloader only reloads once
- Likely race condition with keep-alive http handling
- Crash when using --reload and SSL certificate
- Uvicorn fails to start in 0.10.1+ (Can't pickle local object)
- Gunicorn with UvicornWorker is not respecting the timeout
- Uvicorn via gunicorn worker doesn't respect `--forwarded-allow-ips`
- Duplicate logs when using root logger with 'gunicorn -k uvicorn.workers.UvicornWorker ...'
- uvicorn closes client connection arbitrarily
- Error during WebSocket handshake: Unexpected response code: 400 (anonymous) @ (index):16
- ValueError: 'localhost' does not appear to be an IPv4 or IPv6 address
- Gunicorn+UvicornWorker,access log not working after logrotate access log file.
- Subprocess returncode is not detected when running Gunicorn with Uvicorn (with fix PR companion)
- Requests hang when running quart with uvicorn
- Sending SIGTERM to parent process when running with --workers hangs indefinitely
- Websockets implementation does not clean properly tasks if handshake fails
- Run uvicorn programmatically with `reload=True` not in if-name-main block print irrelated error message
- httptools.parser.errors.HttpParserInvalidURLError on fragmented first line of the HTTP request.
- 0.16.0: pytetst is failing in random units when `pytest-randomly` is used
- `asgiref` backward compatibility
- Regression (?) with uvicorn workers
- OSError occurs when workers > 1
- Incorrect websocket close code on server shutdown
- Connection aborted after HttpParserInvalidMethodError when making consecutive POST requests
- Memory leak when using request.state
- The `reload_delay` setting is invalid when using `WatchFiles`?
- with 'uvicorn==0.21.0' modifications made to the 'request.state' persist between requests
- logger.level vs logger.getEffectiveLevel() on config load()