X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=contrib%2Fsb-bsd-sockets%2Fmisc.lisp;h=2c0246bd9817b05d6aabcaa45a8b2cb298455f48;hb=27763fafd1b170518ac2e85b9344fdddddcfd7c5;hp=c511cc7424ffb144a4e5605a7a683e802120ab68;hpb=e449254c6a6a768b42a878274a90db9bb7d2ba2b;p=sbcl.git diff --git a/contrib/sb-bsd-sockets/misc.lisp b/contrib/sb-bsd-sockets/misc.lisp index c511cc7..2c0246b 100644 --- a/contrib/sb-bsd-sockets/misc.lisp +++ b/contrib/sb-bsd-sockets/misc.lisp @@ -12,6 +12,7 @@ (defgeneric non-blocking-mode (socket) (:documentation "Is SOCKET in non-blocking mode?")) +#-win32 (defmethod non-blocking-mode ((socket socket)) (let ((fd (socket-file-descriptor socket))) (sb-alien:with-alien ((arg integer)) @@ -20,9 +21,13 @@ sockint::o-nonblock) 0)))) +#+win32 +(defmethod non-blocking-mode ((socket socket)) 0) + (defgeneric (setf non-blocking-mode) (non-blocking-p socket) (:documentation "Put SOCKET in non-blocking mode - or not, according to NON-BLOCKING-P")) +#-win32 (defmethod (setf non-blocking-mode) (non-blocking-p (socket socket)) (declare (optimize (speed 3))) (let* ((fd (socket-file-descriptor socket)) @@ -32,9 +37,14 @@ (logior arg1 sockint::o-nonblock) (logand (lognot sockint::o-nonblock) arg1)))) (when (= (the (signed-byte 32) -1) - (the (signed-byte 32) + (the (signed-byte 32) (sockint::fcntl fd sockint::f-setfl arg2))) (socket-error "fcntl")) non-blocking-p)) +#+win32 +(defmethod (setf non-blocking-mode) (non-blocking-p (socket socket)) 0) +;; (sb-alien:with-alien ((mode (unsigned 32))) +;; (if non-blocking-p (setf mode 1)) +;; (ioctlsocket socket FIONBIO mode)))