Author: ehuelsmann
Date: Sun Jan 29 15:51:23 2006
New Revision: 8
Added:
usocket/trunk/doc/active-sockets-apis.txt
Modified:
usocket/trunk/backend/sbcl.lisp
usocket/trunk/doc/design.txt
usocket/trunk/package.lisp
usocket/trunk/usocket.asd
usocket/trunk/usocket.lisp (contents, props changed)
Log:
Implement the first bit of 'Step 1' in SBCL and at the same time,
start documenting the different implementations wrt that same step.
Modified: usocket/trunk/backend/sbcl.lisp
==============================================================================
--- usocket/trunk/backend/sbcl.lisp (original)
+++ usocket/trunk/backend/sbcl.lisp Sun Jan 29 15:51:23 2006
@@ -12,48 +12,33 @@
:real-condition condition
:socket socket))))
-(defun socket-create (&optional (type :stream))
+(defun socket-connect (host port &optional (type :stream))
"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).
`port' is assumed to be an integer.
-Returns a socket object."
+Returns a usocket object."
(let* ((socket (make-instance 'sb-bsd-sockets:inet-socket
:type type :protocol :tcp))
- (stream (sb-bsd-sockets:socket-make-stream socket)))
- (make-instance 'usocket :stream stream :socket socket)))
-
-(defmethod socket-bind ((usocket usocket)
- &key (local-host "localhost")
- (local-port 0)
- (reuse-address t))
- (with-slots (usocket)
- socket
-;; (setf (sockopt-reuseaddress socket) reuse-address)
- (setf socket
-
-(defmethod socket-connect (host port)
+ (stream (sb-bsd-sockets:socket-make-stream socket))
+ (usocket (make-instance 'usocket :stream stream :socket socket)))
(handler-case (sb-bsd-sockets:socket-connect socket host port)
(condition (condition) (handle-condition condition usocket)))
usocket))
-(defmethod socket-close ((socket socket))
+(defmethod socket-close ((usocket usocket))
"Close socket."
- (handler-case (sb-bsd-sockets:socket-close (real-socket socket))
- (condition (condition) (handle-condition condition socket))))
+ (handler-case (sb-bsd-sockets:socket-close (socket usocket))
+ (condition (condition) (handle-condition condition usocket))))
-(defmethod socket-read-line ((socket socket))
- (cl:read-line (real-stream socket)))
-(defmethod socket-write-sequence ((socket socket) sequence)
- (cl:write-sequence sequence (real-stream socket)))
(defun get-host-by-address (address)
(handler-case (sb-bsd-sockets::host-ent-name
(sb-bsd-sockets:get-host-by-address address))
(condition (condition) (handle-condition condition))))
-(defun get-host-by-name (name)
+(defun get-hosts-by-name (name)
(handler-case (sb-bsd-sockets::host-ent-addresses
(sb-bsd-sockets:get-host-by-name name))
(condition (condition) (handle-condition condition))))
Added: usocket/trunk/doc/active-sockets-apis.txt
==============================================================================
--- (empty file)
+++ usocket/trunk/doc/active-sockets-apis.txt Sun Jan 29 15:51:23 2006
@@ -0,0 +1,19 @@
+ -*- text -*-
+
+A document to summarizing which API's of the different implementations
+are associated with 'Step 1'.
+
+
+SBCL
+====
+
+ sockets:
+ - socket-bind
+ - make-instance 'inet-socket
+ - socket-connect
+ - socket-close
+
+ DNS name resolution:
+ - get-host-by-name
+ - get-host-by-address
+ - host-ent-addresses
Modified: usocket/trunk/doc/design.txt
==============================================================================
--- usocket/trunk/doc/design.txt (original)
+++ usocket/trunk/doc/design.txt Sun Jan 29 15:51:23 2006
@@ -76,5 +76,4 @@
- clisp
- Allegro
- LispWorks
-
-
+ - OpenMCL
Modified: usocket/trunk/package.lisp
==============================================================================
--- usocket/trunk/package.lisp (original)
+++ usocket/trunk/package.lisp Sun Jan 29 15:51:23 2006
@@ -10,22 +10,23 @@
(eval-when (:execute :load-toplevel :compile-toplevel)
(defpackage :usocket
(:use :cl)
- (:nicknames :usoc)
- (:shadowing-import-from "COMMON-LISP" :close
- :open
- :read-line
- :write-sequence)
- (:export :open ; socket related operations
- :make-socket
- :close
- :read-line
- :write-sequence
- :socket ; socket object and accessors
- :host
- :port
+ (:export :socket-connect ; socket constructors and methods
+ :socket-close
+
+ :usocket ; socket object and accessors
+ :socket-stream
+
:get-host-by-address ; name services
+ :get-hosts-by-name
:get-host-by-name
- :host-byte-order ; utility operators
+ :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)))
Modified: usocket/trunk/usocket.asd
==============================================================================
--- usocket/trunk/usocket.asd (original)
+++ usocket/trunk/usocket.asd Sun Jan 29 15:51:23 2006
@@ -13,12 +13,11 @@
(defsystem usocket
:name "usocket"
- :author "Erik Enge"
+ :author "Erik Enge & Erik Huelsmann"
:version "0.1.0"
:licence "MIT"
:description "Universal socket library for Common Lisp"
- :depends-on #+sbcl (:sb-bsd-sockets :split-sequence)
- #-sbcl (:split-sequence)
+ :depends-on (#+sbcl :sb-bsd-sockets :split-sequence)
:components ((:file "package")
(:file "usocket"
:depends-on ("package"))
Modified: usocket/trunk/usocket.lisp
==============================================================================
--- usocket/trunk/usocket.lisp (original)
+++ usocket/trunk/usocket.lisp Sun Jan 29 15:51:23 2006
@@ -1,5 +1,5 @@
;;;; $Id$
-;;;; $Source$
+;;;; $URL$
;;;; See LICENSE for licensing information.
@@ -11,7 +11,7 @@
:accessor socket)
(stream
:initarg :stream
- :accessor stream)
+ :accessor socket-stream)
(local-address
:initarg :local-address
:accessor local-address)
@@ -19,15 +19,17 @@
:initarg :local-port
:accessor local-port)))
-(defun make-socket (&key socket local-address local-port stream))
+(defun make-socket (&key socket local-address local-port stream)
(make-instance 'usocket
:socket socket
- :local-address host
+ :local-address local-address
:local-port local-port
:stream stream))
+(defgeneric socket-close (usocket))
+
;;
-;; Utility
+;; IPv4 utility functions
;;
(defun list-of-strings-to-integers (list)
@@ -77,3 +79,15 @@
3232235777."
(+ (* (aref vector 0) 256 256 256) (* (aref vector 1) 256 256)
(* (aref vector 2) 256) (aref vector 3)))
+
+;;
+;; DNS helper functions
+;;
+
+(defun get-host-by-name (name)
+ (let ((hosts (get-hosts-by-name name)))
+ (car hosts)))
+
+(defun get-random-host-by-name (name)
+ (let ((hosts (get-hosts-by-name name)))
+ (elt hosts (random (length hosts)))))