From 753b2f01772154a1383f8861c7bfc5882d6fc4d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B6rn=20Lindqvist?= Date: Mon, 21 Oct 2013 18:27:29 +0200 Subject: [PATCH] io.files: make wait-for-fd generic and dispatch depending on backend do-ssl-accept need to call wait-for-fd so it needs to be generic. On windows it's a noop but on unix it will wait for the fd. --- basis/io/backend/unix/unix.factor | 2 +- basis/io/files/windows/windows.factor | 3 +++ basis/io/sockets/secure/openssl/openssl.factor | 5 +---- core/io/files/files.factor | 2 ++ 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/basis/io/backend/unix/unix.factor b/basis/io/backend/unix/unix.factor index c8063b8820..91a1bd41d9 100755 --- a/basis/io/backend/unix/unix.factor +++ b/basis/io/backend/unix/unix.factor @@ -69,7 +69,7 @@ ERROR: io-timeout ; M: io-timeout summary drop "I/O operation timed out" ; -: wait-for-fd ( handle event -- ) +M: unix wait-for-fd ( handle event -- ) dup +retry+ eq? [ 2drop ] [ [ [ self ] dip handle-fd mx get-global ] dip { { +input+ [ add-input-callback ] } diff --git a/basis/io/files/windows/windows.factor b/basis/io/files/windows/windows.factor index bf805d0a22..066da7d46e 100755 --- a/basis/io/files/windows/windows.factor +++ b/basis/io/files/windows/windows.factor @@ -206,6 +206,9 @@ M: windows (wait-to-write) ( port -- ) M: windows (wait-to-read) ( port -- ) [ dup handle>> refill ] with-destructors drop ; +M: windows wait-for-fd ( handle event -- ) + 2drop ; + : console-app? ( -- ? ) GetConsoleWindow >boolean ; M: windows init-stdio diff --git a/basis/io/sockets/secure/openssl/openssl.factor b/basis/io/sockets/secure/openssl/openssl.factor index 547d6d97da..785e63baa6 100644 --- a/basis/io/sockets/secure/openssl/openssl.factor +++ b/basis/io/sockets/secure/openssl/openssl.factor @@ -202,13 +202,10 @@ SYMBOL: default-secure-context { SSL_ERROR_SSL [ (ssl-error) ] } } case ; -! Does this work on windows? : do-ssl-accept ( ssl-handle -- ) dup dup handle>> SSL_accept check-accept-response dup [ - [ dup file>> ] dip - 2drop ! wait-for-fd, todo: figure out wait-for-fd for windows - do-ssl-accept + [ dup file>> ] dip wait-for-fd do-ssl-accept ] [ 2drop ] if ; : maybe-handshake ( ssl-handle -- ) diff --git a/core/io/files/files.factor b/core/io/files/files.factor index 6d01c3427f..88714c49cc 100644 --- a/core/io/files/files.factor +++ b/core/io/files/files.factor @@ -14,6 +14,8 @@ SYMBOL: +output+ GENERIC: drain ( port handle -- event/f ) GENERIC: refill ( port handle -- event/f ) +HOOK: wait-for-fd ( handle event -- ) + MIXIN: file-reader MIXIN: file-writer