Author: psmith Date: Sun Feb 11 22:29:06 2007 New Revision: 86
Modified: branches/home/psmith/restructure/src/io/async-fd.lisp branches/home/psmith/restructure/src/io/nio-server.lisp Log: tidied up close TODO detect remote close properly
Modified: branches/home/psmith/restructure/src/io/async-fd.lisp ============================================================================== --- branches/home/psmith/restructure/src/io/async-fd.lisp (original) +++ branches/home/psmith/restructure/src/io/async-fd.lisp Sun Feb 11 22:29:06 2007 @@ -98,6 +98,7 @@ (cond ((eql errno +ERRNO_EAGAIN+) (setf (read-ready state-machine) nil)) (t + (close-fd (read-fd async-fd)) (error 'read-error :errno errno))))) ((= new-bytes 0) nil);;(throw 'end-of-file nil) @@ -148,7 +149,7 @@ (unless (eql err 11) ;; eagain - failed to write whole buffer need to wait for next notify (perror) (let ((err-cond (make-instance 'write-error :error err))) - (close-fd (write-fd async-fd)) + (close-fd (write-fd async-fd)); - deal with in nio-server? (error err-cond)))) ;;update buffers (if (eql (remaining foreign-write-buffer) 0)
Modified: branches/home/psmith/restructure/src/io/nio-server.lisp ============================================================================== --- branches/home/psmith/restructure/src/io/nio-server.lisp (original) +++ branches/home/psmith/restructure/src/io/nio-server.lisp Sun Feb 11 22:29:06 2007 @@ -43,12 +43,14 @@ (maphash #'(lambda (k async-fd) #+nio-debug (format-log t "Dealing with ~a => ~a~%" k async-fd) - ;process reads - (when (read-ready async-fd) (read-more async-fd)) - (when (> (buffer-position (foreign-read-buffer async-fd)) 0) - (process-read async-fd)) - - ;process-writes +;process reads + (handler-case + (progn + (when (read-ready async-fd) (read-more async-fd)) + (when (> (buffer-position (foreign-read-buffer async-fd)) 0) + (process-read async-fd))) + (read-error (re) (push async-fd removals))) +;process-writes (handler-case (progn (process-write async-fd) @@ -63,6 +65,7 @@ client-hash) (dolist (async-fd removals) (format-log t "nio-server:process-async-fds processing remove for ~a~%" async-fd) + (close-sm async-fd) (setf (active-conn (socket async-fd)) nil) (remhash (async-fd-read-fd async-fd) client-hash))))