summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2017-02-12 20:57:29 +0100
committerAndy Wingo <wingo@pobox.com>2017-02-12 20:57:29 +0100
commitcb94fcc26e1b3b61ba95739c6301d417de571df4 (patch)
treedc39f632bbcb7eb1a4a3758959c1c7853039e47d
parentCope with migration of initial fiber (diff)
downloadguile-fibers-cb94fcc26e1b3b61ba95739c6301d417de571df4.tar.gz
Gracefully handle EPIPE
* fibers/web/server.scm (client-loop): Avoid error when reading from shut-down socket (EPIPE). Perhaps a read that gives EPIPE should produce an EOF object anyway.
-rw-r--r--fibers/web/server.scm7
1 files changed, 4 insertions, 3 deletions
diff --git a/fibers/web/server.scm b/fibers/web/server.scm
index 9f50277..e2f6dab 100644
--- a/fibers/web/server.scm
+++ b/fibers/web/server.scm
@@ -181,7 +181,9 @@ on the procedure being called at any particular time."
(lambda ()
(let loop ()
(cond
- ((eof-object? (lookahead-u8 client))
+ ((catch #t
+ (lambda () (eof-object? (lookahead-u8 client)))
+ (lambda _ #t))
(close-port client))
(else
(call-with-values
@@ -203,8 +205,7 @@ on the procedure being called at any particular time."
(when body
(put-bytevector client body))
(force-output client)
- (if (and (keep-alive? response)
- (not (eof-object? (lookahead-u8 client))))
+ (if (keep-alive? response)
(loop)
(close-port client))))))))))
(lambda (k . args)