diff --git a/knots/web-server.scm b/knots/web-server.scm index adaba13..a99b971 100644 --- a/knots/web-server.scm +++ b/knots/web-server.scm @@ -576,19 +576,28 @@ before sending back to the client." (spawn-fiber (lambda () - (let loop () - (match (accept socket (logior SOCK_NONBLOCK SOCK_CLOEXEC)) - ((client . sockaddr) - (spawn-fiber (lambda () - (client-loop client handler - read-request-exception-handler - write-response-exception-handler - connection-idle-timeout - connection-buffer-size - (post-request-hook/safe - post-request-hook))) - #:parallel? #t) - (loop)))))) + (while #t + (with-exception-handler + (const #t) + (lambda () + (with-exception-handler + (lambda (exn) + (print-backtrace-and-exception/knots exn)) + (lambda () + (let loop () + (match (accept socket (logior SOCK_NONBLOCK SOCK_CLOEXEC)) + ((client . sockaddr) + (spawn-fiber (lambda () + (client-loop client handler + read-request-exception-handler + write-response-exception-handler + connection-idle-timeout + connection-buffer-size + (post-request-hook/safe + post-request-hook))) + #:parallel? #t) + (loop))))))) + #:unwind? #t)))) (make-web-server socket (vector-ref (getsockname socket)