diff options
Diffstat (limited to 'Lisp/moxie/compat/compat-sbcl.lisp')
-rw-r--r-- | Lisp/moxie/compat/compat-sbcl.lisp | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Lisp/moxie/compat/compat-sbcl.lisp b/Lisp/moxie/compat/compat-sbcl.lisp new file mode 100644 index 0000000..bb43bc8 --- /dev/null +++ b/Lisp/moxie/compat/compat-sbcl.lisp @@ -0,0 +1,49 @@ +;;; -*- Lisp -*- +;; $Id: compat-sbcl.lisp 36 2006-01-01 20:47:40Z bjc $ +(in-package :moxie) + +(defvar *stream-to-handler* (make-hash-table)) +(defvar *stream-to-socket* (make-hash-table)) + +(defun make-result-stream () + (sb-sys:make-fd-stream 3 :output t)) + +(defun coerce-inet-address-designator (host) + "Coerce HOST into an addess vector." + (cond ((typep host '(vector (unsigned-byte 8) 4)) host) + ((some #'alpha-char-p host) (sb-bsd-sockets:host-ent-address + (sb-bsd-sockets:get-host-by-name host))) + (t (sb-bsd-sockets:make-inet-address host)))) + +(defun open-connection (host port &key (buffering :full)) + "Opens a connection to HOST:PORT, returning a STREAM if successful, NIL otherwise." + (let ((socket (make-instance 'sb-bsd-sockets:inet-socket :type :stream + :protocol :tcp))) + (sb-bsd-sockets:socket-connect socket (coerce-inet-address-designator host) port) + (let ((stream (sb-bsd-sockets:socket-make-stream socket + :input t :output t :buffering buffering))) + (setf (gethash stream *stream-to-socket*) socket) + stream))) + +(defun close-connection (stream) + "Closes STREAM." + (ignore-errors + (remove-input-handler stream) + (remhash stream *stream-to-socket*) + (close stream))) + +(defun add-input-handler (stream handler) + "Adds HANDLER to the input handler list on SOCKET." + (setf (gethash stream *stream-to-handler*) + (sb-sys:add-fd-handler (sb-bsd-sockets:socket-file-descriptor (gethash stream *stream-to-socket*)) + :input + (lambda (fd) + (declare (ignore fd)) + (funcall handler stream))))) + +(defun remove-input-handler (stream) + (awhen (gethash stream *stream-to-handler*) + (sb-sys:remove-fd-handler it))) + +(defun save-lisp-and-die (path) + (sb-ext:save-lisp-and-die path))
\ No newline at end of file |