[Cl-irc-cvs] CVS update: cl-irc/protocol.lisp
Brian Mastenbrook
bmastenbrook at common-lisp.net
Fri Aug 6 13:00:54 UTC 2004
Update of /project/cl-irc/cvsroot/cl-irc
In directory common-lisp.net:/home/bmastenbrook/cl-irc
Modified Files:
protocol.lisp
Log Message:
change re sbcl start-background-message-handler
Date: Fri Aug 6 06:00:52 2004
Author: bmastenbrook
Index: cl-irc/protocol.lisp
diff -u cl-irc/protocol.lisp:1.9 cl-irc/protocol.lisp:1.10
--- cl-irc/protocol.lisp:1.9 Tue Jun 22 11:47:08 2004
+++ cl-irc/protocol.lisp Fri Aug 6 06:00:52 2004
@@ -1,4 +1,4 @@
-;;;; $Id: protocol.lisp,v 1.9 2004/06/22 18:47:08 ehuelsmann Exp $
+;;;; $Id: protocol.lisp,v 1.10 2004/08/06 13:00:52 bmastenbrook Exp $
;;;; $Source: /project/cl-irc/cvsroot/cl-irc/protocol.lisp,v $
;;;; See LICENSE for licensing information.
@@ -33,6 +33,10 @@
:initarg :server-stream
:accessor server-stream
:documentation "Stream used to talk to the IRC server.")
+ (server-socket
+ :initarg :server-socket
+ :accessor server-socket
+ :initform nil)
(client-stream
:initarg :client-stream
:accessor client-stream
@@ -76,12 +80,14 @@
(defun make-connection (&key (user nil)
(server-name "")
(server-stream nil)
+ (server-socket nil)
(client-stream t)
(hooks nil))
(let ((connection (make-instance 'connection
:user user
:server-name server-name
:server-stream server-stream
+ :server-socket server-socket
:client-stream client-stream)))
(dolist (hook hooks)
(add-hook connection (car hook) (cadr hook)))
@@ -118,6 +124,12 @@
(and (streamp stream)
(open-stream-p stream))))
+(define-condition invalidate-me (condition)
+ ((socket :initarg :socket
+ :reader invalidate-me-socket)
+ (condition :initarg :condition
+ :reader invalidate-me-condition)))
+
(defmethod read-message ((connection connection))
(let ((read-more-p t))
(handler-case
@@ -128,7 +140,10 @@
(format *debug-stream* "~A" (describe message)))
(irc-message-event message)
message))) ; needed because of the "loop while" in read-message-loop
- (stream-error () (setf read-more-p nil)))))
+ (stream-error (c) (setf read-more-p nil)
+ (signal 'invalidate-me :socket
+ (server-socket connection)
+ :condition c)))))
(defvar *process-count* 0)
@@ -152,7 +167,13 @@
(server-stream connection))
:input (lambda (fd)
(declare (ignore fd))
- (read-message connection))))))
+ (handler-case
+ (read-message connection)
+ (invalidate-me (c)
+ (sb-sys:invalidate-descriptor
+ (invalidate-me-socket c))
+ (format t "Socket closed: ~A~%"
+ (invalidate-me-condition c)))))))))
(defun stop-background-message-handler (process)
"Stops a background message handler process returned by the start function."
More information about the cl-irc-cvs
mailing list