From: Anton Kovalenko Date: Wed, 18 Aug 2010 21:40:26 +0000 (+0400) Subject: sb-bsd-sockets: Fix error code handling on Windows X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=7254da92a1ba1bf8bc5a2e78a29d993f272d526e;p=sbcl.git sb-bsd-sockets: Fix error code handling on Windows Factored out into a new function for the win32-specific WSAGetLastError call. Run-time results now match the existing constant definitions. Thanks to Anton Kovalenko. --- diff --git a/contrib/sb-bsd-sockets/sockets.lisp b/contrib/sb-bsd-sockets/sockets.lisp index 17f30b7..9118a6a 100644 --- a/contrib/sb-bsd-sockets/sockets.lisp +++ b/contrib/sb-bsd-sockets/sockets.lisp @@ -5,6 +5,13 @@ (eval-when (:load-toplevel :compile-toplevel :execute) + +;;; Winsock is different w.r.t errno +(defun socket-errno () + "Get socket error code, usually from errno, but see #+win32." + #+win32 (sockint::wsa-get-last-error) + #-win32 (sb-unix::get-errno)) + (defclass socket () ((file-descriptor :initarg :descriptor :reader socket-file-descriptor) @@ -109,7 +116,7 @@ values")) (size-of-sockaddr socket)))) (cond ((and (= fd -1) - (member (sb-unix::get-errno) + (member (socket-errno) (list sockint::EAGAIN sockint::EINTR))) nil) ((= fd -1) (socket-error "accept")) @@ -218,7 +225,7 @@ buffer was too small.")) (sb-alien:addr sa-len)))) (cond ((and (= len -1) - (member (sb-unix::get-errno) + (member (socket-errno) (list sockint::EAGAIN sockint::EINTR))) nil) ((= len -1) (socket-error "recvfrom")) @@ -295,7 +302,7 @@ send(2) will be called instead. Returns the number of octets written.")) flags))))) (cond ((and (= len -1) - (member (sb-unix::get-errno) + (member (socket-errno) (list sockint::EAGAIN sockint::EINTR))) nil) ((= len -1) @@ -499,7 +506,7 @@ request an input stream and get an output stream in response\)." ;; FIXME: Our Texinfo documentation extracter need at least his to spit ;; out the signature. Real documentation would be better... "" - (let* ((errno (sb-unix::get-errno)) + (let* ((errno (socket-errno)) (condition (condition-for-errno errno))) (error condition :errno errno :syscall where)))