From 7fb94bf9b75f899b3b3e062baa3d39cdfebe3ff5 Mon Sep 17 00:00:00 2001 From: jjgarcia Date: Mon, 14 Feb 2005 14:46:20 +0000 Subject: [PATCH] Proper closing of sockets involves closing both the stream and the file descriptor. --- contrib/sockets/sockets.lisp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/contrib/sockets/sockets.lisp b/contrib/sockets/sockets.lisp index 206a0c81d..471c56a7d 100644 --- a/contrib/sockets/sockets.lisp +++ b/contrib/sockets/sockets.lisp @@ -381,15 +381,12 @@ SB-SYS:MAKE-FD-STREAM.")) ;; reassigned to some other file, and closing it would be bad (let ((fd (socket-file-descriptor socket))) - (cond ((eql fd -1) ; already closed - nil) - ((slot-boundp socket 'stream) - (close (slot-value socket 'stream)) ;; closes fd - (setf (slot-value socket 'file-descriptor) -1) - (slot-makunbound socket 'stream)) - (t - (if (= (socket-close-low-level socket) -1) - (socket-error "close")))))) + (unless (eql fd -1) ; already closed + (when (slot-boundp socket 'stream) + (close (slot-value socket 'stream)) ;; closes fd + (slot-makunbound socket 'stream)) + (if (= (socket-close-low-level socket) -1) + (socket-error "close"))))) ;; FIXME: How bad is manipulating fillp directly? (defmethod socket-receive ((socket socket) buffer length