Author: ehuelsmann Date: Thu Jun 8 15:43:23 2006 New Revision: 116
Modified: usocket/trunk/condition.lisp usocket/trunk/usocket.lisp Log: Trivial-sockets compat addition (as far as possible at this stage) Also formatting tweaks and comment removal.
Modified: usocket/trunk/condition.lisp ============================================================================== --- usocket/trunk/condition.lisp (original) +++ usocket/trunk/condition.lisp Thu Jun 8 15:43:23 2006 @@ -5,6 +5,13 @@
(in-package :usocket)
+;; Condition raised by operations with unsupported arguments +;; For trivial-sockets compatibility. + +(define-condition unsupported (error) + ((feature :initarg :feature :reader unsupported-feature))) + + ;; Conditions raised by sockets operations
(define-condition socket-condition (condition)
Modified: usocket/trunk/usocket.lisp ============================================================================== --- usocket/trunk/usocket.lisp (original) +++ usocket/trunk/usocket.lisp Thu Jun 8 15:43:23 2006 @@ -10,23 +10,38 @@ (defclass usocket () ((socket :initarg :socket - :accessor socket) + :accessor socket + :documentation "Implementation specific socket object instance.") (stream :initarg :stream - :accessor socket-stream) -;; (local-address ;; possibly need to eliminate -;; :initarg :local-address -;; :accessor local-address) -;; (local-port ;; possibly need to eliminate -;; :initarg :local-port -;; :accessor local-port) - )) + :accessor socket-stream + :documentation "Implementation specific socket stream instance.")))
(defun make-socket (&key socket stream) + "Create a usocket socket type from implementation specific socket +and stream objects." (make-instance 'usocket :socket socket :stream stream))
+(defun open-stream (peer-host peer-port + &key (local-host :any) + (local-port 0) + (external-format :default) + (element-type 'character) + (protocol :tcp)) + (unless (and (eql local-host :any) (eql local-port 0)) + (error 'unsupported :feature :bind)) + (unless (eql protocol :tcp) + (error 'unsupported :feature `(:protocol ,protocol))) + (unless (eql external-format :default) + (error 'unsupported :feature :external-format)) + (unless (eql element-type 'character) + (error 'unsupported :feature :element-type)) + (let ((sock (socket-connect peer-host peer-port))) + (when sock + (socket-stream sock)))) + (defgeneric socket-close (usocket) (:documentation "Close a previously opened `usocket'."))
@@ -103,8 +118,8 @@
(defgeneric host-byte-order (address)) (defmethod host-byte-order ((string string)) - "Convert a string, such as 192.168.1.1, to host-byte-order, such as -3232235777." + "Convert a string, such as 192.168.1.1, to host-byte-order, +such as 3232235777." (let ((list (list-of-strings-to-integers (split-sequence:split-sequence #. string)))) (+ (* (first list) 256 256 256) (* (second list) 256 256) (* (third list) 256) (fourth list)))) @@ -163,6 +178,11 @@ ;; Setting of documentation for backend defined functions ;;
+;; Documentation for the function +;; +;; (defun SOCKET-CONNECT (host port) ..) +;; + (setf (documentation 'socket-connect 'function) "Connect to `host' on `port'. `host' is assumed to be a string of an IP address represented in vector notation, such as #(192 168 1 1).