-
- Notifications
You must be signed in to change notification settings - Fork 1.7k
Open
Labels
kind:bugA bug in the code. Does not apply to documentation, specs, etc.A bug in the code. Does not apply to documentation, specs, etc.topic:stdlib:networking
Description
While running an HTTP::Server bound to a UNIX socket, trying to send a response after the client closed the connection prints exceptions.
This lets me think it is a bug since this behavior doesn't happen when using HTTP::Server#bind_tcp, which doesn't print any exception after a connection has been closed.
To reproduce it:
- Run the below code snippet
- On a second terminal, make a HTTP call:
curl --unix-socket /tmp/server.sock 'http://localhost/' - When seeing "Receiving request", CTRL+C the
curlcommand - Exceptions will be printed on the STDOUT.
Here is the code to reproduce:
require "http/server" http_server = HTTP::Server.new do |context| puts "Receiving request" sleep 5.seconds context.response.puts "hello" end # http_server.bind_tcp 8080 http_server.bind_unix "/tmp/server.sock" Signal::INT.trap { http_server.close } http_server.listenThe exceptions:
Unhandled exception in spawn: Error while flushing data to the client (HTTP::Server::ClientError) from /usr/lib/crystal/lib/http/server/response.cr:328:9 in 'unbuffered_flush' from /usr/lib/crystal/lib/io/buffered.cr:251:5 in 'flush' from /usr/lib/crystal/lib/io/buffered.cr:258:5 in 'close' from /usr/lib/crystal/lib/http/server/response.cr:298:9 in 'close' from /usr/lib/crystal/lib/http/server/request_processor.cr:63:11 in 'process' from /usr/lib/crystal/lib/http/server.cr:521:5 in 'handle_client' from /usr/lib/crystal/lib/http/server.cr:451:5 in '->' from /usr/lib/crystal/lib/fiber.cr:143:11 in 'run' from /usr/lib/crystal/lib/fiber.cr:95:34 in '->' from ??? Caused by: Error writing to socket (#<UNIXSocket:0x7f4feac85e00>): Broken pipe (IO::Error) from /usr/lib/crystal/lib/crystal/system/unix/event_loop_libevent.cr:227:11 in 'write' from /usr/lib/crystal/lib/crystal/system/socket.cr:89:5 in 'system_write' from /usr/lib/crystal/lib/socket.cr:451:16 in 'unbuffered_write' from /usr/lib/crystal/lib/io/buffered.cr:250:5 in 'flush' from /usr/lib/crystal/lib/http/server/response.cr:325:9 in 'unbuffered_flush' from /usr/lib/crystal/lib/io/buffered.cr:251:5 in 'flush' from /usr/lib/crystal/lib/io/buffered.cr:258:5 in 'close' from /usr/lib/crystal/lib/http/server/response.cr:298:9 in 'close' from /usr/lib/crystal/lib/http/server/request_processor.cr:63:11 in 'process' from /usr/lib/crystal/lib/http/server.cr:521:5 in 'handle_client' from /usr/lib/crystal/lib/http/server.cr:451:5 in '->' from /usr/lib/crystal/lib/fiber.cr:143:11 in 'run' from /usr/lib/crystal/lib/fiber.cr:95:34 in '->' from ??? Metadata
Metadata
Assignees
Labels
kind:bugA bug in the code. Does not apply to documentation, specs, etc.A bug in the code. Does not apply to documentation, specs, etc.topic:stdlib:networking