]> gitweb.factorcode.org Git - factor.git/commitdiff
io.sockets.secure.openssl: set a terminated slot too so we know we got disconnected
authorDoug Coleman <doug.coleman@gmail.com>
Mon, 20 Dec 2021 08:45:36 +0000 (02:45 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Mon, 20 Dec 2021 08:45:36 +0000 (02:45 -0600)
basis/io/sockets/secure/openssl/openssl.factor

index 63aed6b47f2204974bb53a721fd69400183c0647..f054e17d993a2b34ce3c21ebda49e0cff1c475a8 100644 (file)
@@ -187,7 +187,7 @@ M: openssl-context dispose*
         tri
     ] with-destructors ;
 
-TUPLE: ssl-handle < disposable file handle connected ;
+TUPLE: ssl-handle < disposable file handle connected terminated ;
 
 SYMBOL: default-secure-context
 
@@ -275,7 +275,8 @@ PRIVATE>
     handle ;
 
 : ssl-error-syscall ( ssl-handle -- event/f )
-    f >>connected drop
+    f >>connected
+    t >>terminated drop
     ERR_get_error {
         { -1 [
             errno { [ ECONNRESET = ] [ EPIPE = ] } 1||
@@ -308,8 +309,12 @@ PRIVATE>
 
 : maybe-handshake ( ssl-handle -- )
     dup connected>> [ drop ] [
-        [ [ do-ssl-accept ] with-timeout ]
-        [ t swap connected<< ] bi
+        dup terminated>> [
+            drop
+        ] [
+            [ [ do-ssl-accept ] with-timeout ]
+            [ t swap connected<< ] bi
+        ] if
     ] if ;
 
 ! Input ports