summaryrefslogtreecommitdiff
path: root/web/socket/server.scm
diff options
context:
space:
mode:
authorMatthew Wolff <matthewjwolff@gmail.com>2024-05-08 19:38:02 -0500
committerDavid Thompson <dthompson2@worcester.edu>2024-05-09 07:51:56 -0400
commit438d87675d9ef18695475685ff36ff75a5506466 (patch)
treed2d49e3d0f19377b251bd27f3e1a9e52cbae79f2 /web/socket/server.scm
parent0ab74ba68c57f7b16832c3549d9939a3c78d7da4 (diff)
Distinguish close frames from timeouts.
Diffstat (limited to 'web/socket/server.scm')
-rw-r--r--web/socket/server.scm10
1 files changed, 6 insertions, 4 deletions
diff --git a/web/socket/server.scm b/web/socket/server.scm
index 3394d3b..353a2eb 100644
--- a/web/socket/server.scm
+++ b/web/socket/server.scm
@@ -95,10 +95,12 @@ called for each complete message that is received."
(write-response response client-socket)
(force-output client-socket)
(let loop ()
- (let ((frame (read-data-frame client-socket #:echo-close? #t)))
- (when frame
- (handle-data-frame (frame-type frame) (frame-data frame))
- (loop))))))
+ (match (read-data-frame client-socket #:echo-close? #t)
+ ((or #f (? close-frame?))
+ (values))
+ (frame
+ (handle-data-frame (frame-type frame) (frame-data frame))
+ (loop))))))
(define* (run-server handler #:optional (server-socket (make-server-socket)))
"Run WebSocket server on SERVER-SOCKET. HANDLER, a procedure that