[usocket-cvs] r17 - in usocket/trunk: . doc

ehuelsmann at common-lisp.net ehuelsmann at common-lisp.net
Wed Feb 1 22:00:17 UTC 2006


Author: ehuelsmann
Date: Wed Feb  1 16:00:16 2006
New Revision: 17

Modified:
   usocket/trunk/condition.lisp   (contents, props changed)
   usocket/trunk/doc/design.txt
   usocket/trunk/doc/errors.txt
   usocket/trunk/package.lisp   (contents, props changed)
   usocket/trunk/usocket.lisp
Log:
Update with latest condition ideas and API promises.

Modified: usocket/trunk/condition.lisp
==============================================================================
--- usocket/trunk/condition.lisp	(original)
+++ usocket/trunk/condition.lisp	Wed Feb  1 16:00:16 2006
@@ -1,18 +1,74 @@
 ;;;; $Id$
-;;;; $Source$
+;;;; $URL$
 
 ;;;; See LICENSE for licensing information.
 
 (in-package :usocket)
 
-(define-condition usocket-error (error)
-  ((real-condition
-    :reader real-condition
-    :initarg :real-condition)
-   (socket
-    :reader socket
-    :initarg :socket))
-  (:report (lambda (c stream)
-             (format stream "Error (~A) occured in socket: ~A."
-                     (real-condition c) (socket c)))))
-                  
+;; (define-condition usocket-error (error)
+;;   ((real-condition
+;;     :reader real-condition
+;;     :initarg :real-condition)
+;;    (socket
+;;     :reader socket
+;;     :initarg :socket))
+;;   (:report (lambda (c stream)
+;;              (format stream "Error (~A) occured in socket: ~A."
+;;                      (real-condition c) (socket c)))))
+
+(define-condition usocket-condition (condition)
+  () ;;###FIXME: no slots (yet); should at least be the affected usocket...
+  (:documentation ""))
+
+(define-condition usocket-error (usocket-condition error)
+  () ;; no slots (yet)
+  (:documentation ""))
+
+
+
+(eval-when (:compile-toplevel :load-toplevel :execute)
+  (defun define-usocket-condition-class (class &rest parents)
+    `(progn
+       (define-condition ,class ,parents ())
+       (export ',class))))
+
+(defmacro define-usocket-condition-classes (class-list parents)
+  `(progn ,@(mapcar #'(lambda (x)
+                        (apply #'define-usocket-condition-class
+                               x parents))
+                    class-list)))
+
+;; Mass define and export our conditions
+(define-usocket-condition-classes
+  (usocket-interrupted-condition)
+  (usocket-condition))
+
+(define-condition usocket-unknown-condition (usocket-condition)
+  ((real-condition))
+  (:documentation ""))
+
+
+;; Mass define and export our errors
+(define-usocket-condition-classes
+  (usocket-address-in-use-error
+   usocket-address-not-available-error
+   usocket-bad-file-descriptor-error
+   usocket-connection-refused-error
+   usocket-invalid-argument-error
+   usocket-no-buffers-error
+   usocket-operation-not-supported-error
+   usocket-operation-not-permitted-error
+   usocket-protocol-not-supported-error
+   usocket-socket-type-not-supported-error
+   usocket-network-unreachable-error
+   usocket-network-down-error
+   usocket-network-reset-error
+   usocket-host-down-error
+   usocket-host-unreachable-error
+   usocket-shutdown-error
+   usocket-timeout-error)
+  (usocket-error))
+
+(define-condition usocket-unknown-error (usocket-error)
+  ((real-error))
+  (:documentation ""))

Modified: usocket/trunk/doc/design.txt
==============================================================================
--- usocket/trunk/doc/design.txt	(original)
+++ usocket/trunk/doc/design.txt	Wed Feb  1 16:00:16 2006
@@ -59,10 +59,19 @@
 The interface provided should allow:
  - 'client'/active sockets
  - 'server'/listening sockets
- - retrieve IP addresses/ports for both sides of the connection
  - provide the usual stream methods to operate on the connection stream
    (not necessarily the socket itself; maybe a socket slot too)
 
+For now, as long as there are no possibilities to have UDP sockets
+to write a DNS client library: (which in the end may work better,
+because in this respect all implementations are different...)
+ - retrieve IP addresses/ports for both sides of the connection
+--- later addition
+I don't think it's a good idea to implement name lookup in the
+very first of steps: we'll see if this is required to get the
+package accepted; not all implementations support it.
+--- later addition; end
+
 Several relevant support functionalities will have to be provided too:
  - long <-> quad-vector operators
  - quad-vector <-> string operators

Modified: usocket/trunk/doc/errors.txt
==============================================================================
--- usocket/trunk/doc/errors.txt	(original)
+++ usocket/trunk/doc/errors.txt	Wed Feb  1 16:00:16 2006
@@ -1,13 +1,20 @@
-EADDRINUSE address-in-use-error
-EAGAIN interrupted-error
-EBADF bad-file-descriptor-error
-ECONNREFUSED connection-refused-error
-EINTR interrupted-error
-EINVAL invalid-argument-error
-ENOBUFS no-buffers-error
-ENOMEM out-of-memory-error
-EOPNOTSUPP operation-not-supported-error
-EPERM operation-not-permitted-error
-EPROTONOSUPPORT protocol-not-supported-error
-ESOCKTNOSUPPORT socket-type-not-supported-error
-ENETUNREACH network-unreachable-error
+EADDRINUSE 48 address-in-use-error
+EADDRNOTAVAIL 49 address-not-available-error
+EAGAIN interrupted-error  ;; not 1 error code: bsd == 11; non-bsd == 35
+EBADF 9 bad-file-descriptor-error
+ECONNREFUSED 61 connection-refused-error
+EINTR 4 interrupted-error
+EINVAL 22 invalid-argument-error
+ENOBUFS 55 no-buffers-error
+ENOMEM 12 out-of-memory-error
+EOPNOTSUPP 45 operation-not-supported-error
+EPERM 1 operation-not-permitted-error
+EPROTONOSUPPORT 43 protocol-not-supported-error
+ESOCKTNOSUPPORT 44 socket-type-not-supported-error
+ENETUNREACH 51 network-unreachable-error
+ENETDOWN 50 network-down-error
+ENETRESET 52 network-reset-error
+ESHUTDOWN 58 already-shutdown-error
+ETIMEDOUT 60 connection-timeout-error
+EHOSTDOWN 64 host-down-error
+EHOSTUNREACH 65 host-unreachable-error

Modified: usocket/trunk/package.lisp
==============================================================================
--- usocket/trunk/package.lisp	(original)
+++ usocket/trunk/package.lisp	Wed Feb  1 16:00:16 2006
@@ -1,5 +1,5 @@
 ;;;; $Id$
-;;;; $Source$
+;;;; $URL$
 
 ;;;; See the LICENSE file for licensing information.
 
@@ -16,17 +16,14 @@
              :usocket ; socket object and accessors
              :socket-stream
 
-             :get-host-by-address ; name services
-             :get-hosts-by-name
-             :get-host-by-name
-             :get-random-host-by-name
-
              :host-byte-order ; IPv4 utility functions
              :hbo-to-dotted-quad
              :hbo-to-vector-quad
              :vector-quad-to-dotted-quad
              :dotted-quad-to-vector-quad
 
-             :usocket-error ; conditions
-             :no-route-to-host)))
+             :usocket-condition ; conditions
+             :usocket-error ; errors
+             :usocket-unknown-condition
+             :usocket-unknown-error)))
 

Modified: usocket/trunk/usocket.lisp
==============================================================================
--- usocket/trunk/usocket.lisp	(original)
+++ usocket/trunk/usocket.lisp	Wed Feb  1 16:00:16 2006
@@ -5,6 +5,8 @@
 
 (in-package :usocket)
 
+
+
 (defclass usocket ()
   ((socket
     :initarg :socket
@@ -19,14 +21,21 @@
     :initarg :local-port
     :accessor local-port)))
 
-(defun make-socket (&key socket local-address local-port stream)
+(defun make-socket (&key socket stream)
   (make-instance 'usocket
                  :socket socket
-                 :local-address local-address
-                 :local-port local-port
                  :stream stream))
 
-(defgeneric socket-close (usocket))
+(defgeneric socket-close (usocket)
+  (:documentation "Close a previously opened USOCKET."))
+
+(defmacro with-connected-socket ((var socket) &body body)
+  `(let ((,var ,socket))
+     (unwind-protect
+         (progn
+           , at body)
+       (when ,var
+         (socket-close ,var)))))
 
 ;;
 ;; IPv4 utility functions



More information about the usocket-cvs mailing list