usocket-cvs
Threads by month
- ----- 2025 -----
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- 702 discussions

16 Jun '08
Author: ehuelsmann
Date: Mon Jun 16 17:56:25 2008
New Revision: 345
Modified:
usocket/branches/new-wfi/backend/allegro.lisp
usocket/branches/new-wfi/backend/clisp.lisp
usocket/branches/new-wfi/backend/cmucl.lisp
usocket/branches/new-wfi/backend/openmcl.lisp
Log:
Follow-up commit, adjusting the wait-list slot names in the files.
Modified: usocket/branches/new-wfi/backend/allegro.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/allegro.lisp (original)
+++ usocket/branches/new-wfi/backend/allegro.lisp Mon Jun 16 17:56:25 2008
@@ -131,25 +131,25 @@
(declare (ignore wait-list)))
(defun %add-waiter (wait-list waiter)
- (push (socket waiter) (%wait wait-list)))
+ (push (socket waiter) (wait-list-%wait wait-list)))
(defun %remove-waiter (wait-list waiter)
- (setf (%wait wait-list)
- (remove (socket waiter) (%wait wait-list))))
+ (setf (wait-list-%wait wait-list)
+ (remove (socket waiter) (wait-list-%wait wait-list))))
(defun wait-for-input-internal (wait-list &key timeout)
(with-mapped-conditions ()
(let ((active-internal-sockets
(if timeout
- (mp:wait-for-input-available (%wait wait-list)
+ (mp:wait-for-input-available (wait-list-%wait wait-list)
:timeout timeout)
- (mp:wait-for-input-available (%wait wait-list)))))
+ (mp:wait-for-input-available (wait-list-%wait wait-list)))))
;; this is quadratic, but hey, the active-internal-sockets
;; list is very short and it's only quadratic in the length of that one.
;; When I have more time I could recode it to something of linear
;; complexity.
;; [Same code is also used in openmcl.lisp]
(dolist (x active-internal-sockets)
- (setf (state (gethash x (wait-map wait-list)))
+ (setf (state (gethash x (wait-list-map wait-list)))
:READ))
wait-list)))
Modified: usocket/branches/new-wfi/backend/clisp.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/clisp.lisp (original)
+++ usocket/branches/new-wfi/backend/clisp.lisp Mon Jun 16 17:56:25 2008
@@ -131,23 +131,23 @@
(declare (ignore wait-list)))
(defun %add-waiter (wait-list waiter)
- (push (cons (socket waiter) NIL) (%wait wait-list)))
+ (push (cons (socket waiter) NIL) (wait-list-%wait wait-list)))
(defun %remove-waiter (wait-list waiter)
- (setf (%wait wait-list)
- (remove (socket waiter) (%wait wait-list) :key #'car)))
+ (setf (wait-list-%wait wait-list)
+ (remove (socket waiter) (wait-list-%wait wait-list) :key #'car)))
(defmethod wait-for-input-internal (wait-list &key timeout)
(with-mapped-conditions ()
(multiple-value-bind
(secs musecs)
(split-timeout (or timeout 1))
- (dolist (x (%wait wait-list))
+ (dolist (x (wait-list-%wait wait-list))
(setf (cdr x) :INPUT))
(let* ((status-list (if timeout
(socket:socket-status request-list secs musecs)
(socket:socket-status request-list)))
- (sockets (wait-list wait-list)))
+ (sockets (wait-list-waiters wait-list)))
(do* ((x (pop sockets) (pop sockets))
(y (pop status-list) (pop status-list)))
((or (null sockets) (null status-list)))
Modified: usocket/branches/new-wfi/backend/cmucl.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/cmucl.lisp (original)
+++ usocket/branches/new-wfi/backend/cmucl.lisp Mon Jun 16 17:56:25 2008
@@ -175,7 +175,7 @@
(with-mapped-conditions ()
(alien:with-alien ((rfds (alien:struct unix:fd-set)))
(unix:fd-zero rfds)
- (dolist (socket (wait-list wait-list))
+ (dolist (socket (wait-list-waiters wait-list))
(unix:fd-set (socket socket) rfds))
(multiple-value-bind
(secs musecs)
@@ -188,7 +188,7 @@
(when timeout secs) musecs)
(if (<= 0 count)
;; process the result...
- (dolist (x (wait-list wait-list))
+ (dolist (x (wait-list-waiters wait-list))
(when (unix:fd-isset (socket x) rfds)
(setf (state x) :READ)))
(progn
Modified: usocket/branches/new-wfi/backend/openmcl.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/openmcl.lisp (original)
+++ usocket/branches/new-wfi/backend/openmcl.lisp Mon Jun 16 17:56:25 2008
@@ -153,7 +153,7 @@
(let* ((ticks-timeout (truncate (* (or timeout 1)
ccl::*ticks-per-second*)))
(active-internal-sockets
- (input-available-p wait-list
+ (input-available-p (wait-list-waiters wait-list)
(when timeout ticks-timeout))))
wait-list)))
1
0

[usocket-cvs] r344 - in usocket/branches/new-wfi: . backend
by ehuelsmann@common-lisp.net 16 Jun '08
by ehuelsmann@common-lisp.net 16 Jun '08
16 Jun '08
Author: ehuelsmann
Date: Mon Jun 16 17:31:21 2008
New Revision: 344
Modified:
usocket/branches/new-wfi/backend/lispworks.lisp
usocket/branches/new-wfi/usocket.lisp
Log:
Fix general usocket breakage and lispworks/non-win32.
Modified: usocket/branches/new-wfi/backend/lispworks.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/lispworks.lisp (original)
+++ usocket/branches/new-wfi/backend/lispworks.lisp Mon Jun 16 17:31:21 2008
@@ -185,7 +185,7 @@
;; unfortunately, it's impossible to share code between
;; non-win32 and win32 platforms...
;; Can we have a sane -pref. complete [UDP!?]- API next time, please?
- (dolist (x (wait-list wait-list))
+ (dolist (x (wait-list-waiters wait-list))
(mp:notice-fd (os-socket-handle x)))
(mp:process-wait-with-timeout "Waiting for a socket to become active"
(truncate timeout)
@@ -195,8 +195,8 @@
(when (usocket-listen x)
(setf (state x) :READ
rv t)))))
- (wait-list wait-list))
- (dolist (x (wait-list wait-list))
+ (wait-list-waiters wait-list))
+ (dolist (x (wait-list-waiters wait-list))
(mp:unnotice-fd (os-socket-handle x)))
wait-list)))
Modified: usocket/branches/new-wfi/usocket.lisp
==============================================================================
--- usocket/branches/new-wfi/usocket.lisp (original)
+++ usocket/branches/new-wfi/usocket.lisp Mon Jun 16 17:31:21 2008
@@ -215,10 +215,10 @@
(defstruct (wait-list (:constructor %make-wait-list))
- (%wait ;; implementation specific
- wait-list ;; the list of all usockets
- wait-map ;; maps implementation sockets to usockets
- ))
+ %wait ;; implementation specific
+ waiters ;; the list of all usockets
+ map ;; maps implementation sockets to usockets
+ )
;; Implementation specific:
;;
@@ -232,22 +232,22 @@
(defun make-wait-list (waiters)
(let ((wl (%make-wait-list)))
- (setf (wait-map wl) (make-hash-table))
+ (setf (wait-list-map wl) (make-hash-table))
(%setup-wait-list wl)
(dolist (x waiters)
(add-waiter wl x))
wl))
(defun add-waiter (wait-list input)
- (setf (gethash (socket input) (wait-map wait-list)) input)
- (pushnew input (wait-list wait-list))
+ (setf (gethash (socket input) (wait-list-map wait-list)) input)
+ (pushnew input (wait-list-waiters wait-list))
(%add-waiter wait-list input))
(defun remove-waiter (wait-list input)
(%remove-waiter wait-list input)
- (setf (wait-list wait-list)
- (remove input (wait-list wait-list)))
- (remhash (socket input) (wait-map wait-list)))
+ (setf (wait-list-waiters wait-list)
+ (remove input (wait-list-waiters wait-list)))
+ (remhash (socket input) (wait-list-map wait-list)))
@@ -275,7 +275,7 @@
(values (if ready-only socks socket-or-sockets) to)))))
(let* ((start (get-internal-real-time))
(sockets-ready 0))
- (dolist (x (wait-list sockets))
+ (dolist (x (wait-list-waiters sockets))
(when (setf (state x)
(if (and (stream-usocket-p x)
(listen (socket-stream x)))
@@ -293,7 +293,7 @@
(when (< elapsed timeout)
(- timeout elapsed))))))
(values (if ready-only
- (remove-if #'null (wait-list socket-or-sockets) :key #'state)
+ (remove-if #'null (wait-list-waiters socket-or-sockets) :key #'state)
socket-or-sockets)
to-result))))
@@ -301,13 +301,13 @@
;; Data utility functions
;;
-(defun integer-to-octready-et-buffer (integer buffer octets &key (start 0))
+(defun integer-to-octet-buffer (integer buffer octets &key (start 0))
(do ((b start (1+ b))
(i (ash (1- octets) 3) ;; * 8
(- i 8)))
((> 0 i) buffer)
(setf (aref buffer b)
- (ldb (byteready- 8 i) integer))))
+ (ldb (byte 8 i) integer))))
(defun octet-buffer-to-integer (buffer octets &key (start 0))
(let ((integer 0))
@@ -423,7 +423,7 @@
(when hosts
(elt hosts (random (length hosts))))))
- (defun host-toready--vector-quad (host)
+ (defun host-to-vector-quad (host)
"Translate a host specification (vector quad, dotted quad or domain name)
to a vector quad."
(etypecase host
@@ -470,7 +470,6 @@
;;
;; (defun SOCKET-CONNECT (host port &key element-type) ..)
;;
-ready-ready-
(setf (documentation 'socket-connect 'function)
"Connect to `host' on `port'. `host' is assumed to be a string or
an IP address represented in vector notation, such as #(192 168 1 1).
@@ -501,4 +500,4 @@
streams to be created by `socket-accept'. `reuseaddress' is supported for
backward compatibility (but deprecated); when both `reuseaddress' and
`reuse-address' have been specified, the latter takes precedence.
-")ready-ready-
+")
1
0

[usocket-cvs] r343 - in usocket/branches/new-wfi: . backend
by ehuelsmann@common-lisp.net 15 Jun '08
by ehuelsmann@common-lisp.net 15 Jun '08
15 Jun '08
Author: ehuelsmann
Date: Sun Jun 15 17:17:23 2008
New Revision: 343
Added:
usocket/branches/new-wfi/BRANCH-README (contents, props changed)
Modified:
usocket/branches/new-wfi/backend/allegro.lisp
usocket/branches/new-wfi/backend/clisp.lisp
usocket/branches/new-wfi/backend/cmucl.lisp
usocket/branches/new-wfi/backend/lispworks.lisp
usocket/branches/new-wfi/backend/openmcl.lisp
usocket/branches/new-wfi/usocket.lisp
Log:
Populate new-WAIT-FOR-INPUT branch with intended API.
Added: usocket/branches/new-wfi/BRANCH-README
==============================================================================
--- (empty file)
+++ usocket/branches/new-wfi/BRANCH-README Sun Jun 15 17:17:23 2008
@@ -0,0 +1,8 @@
+
+
+At least these backends are broken, for now:
+
+ - ABCL
+ - LispWorks (Win32)
+ - SBCL/ ECL
+ - Scieneer
Modified: usocket/branches/new-wfi/backend/allegro.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/allegro.lisp (original)
+++ usocket/branches/new-wfi/backend/allegro.lisp Sun Jun 15 17:17:23 2008
@@ -127,18 +127,29 @@
(list (hbo-to-vector-quad (socket:lookup-hostname
(host-to-hostname name))))))
-(defun wait-for-input-internal (sockets &key timeout)
+(defun %setup-wait-list (wait-list)
+ (declare (ignore wait-list)))
+
+(defun %add-waiter (wait-list waiter)
+ (push (socket waiter) (%wait wait-list)))
+
+(defun %remove-waiter (wait-list waiter)
+ (setf (%wait wait-list)
+ (remove (socket waiter) (%wait wait-list))))
+
+(defun wait-for-input-internal (wait-list &key timeout)
(with-mapped-conditions ()
(let ((active-internal-sockets
(if timeout
- (mp:wait-for-input-available (mapcar #'socket sockets)
+ (mp:wait-for-input-available (%wait wait-list)
:timeout timeout)
- (mp:wait-for-input-available (mapcar #'socket sockets)))))
+ (mp:wait-for-input-available (%wait wait-list)))))
;; this is quadratic, but hey, the active-internal-sockets
;; list is very short and it's only quadratic in the length of that one.
;; When I have more time I could recode it to something of linear
;; complexity.
- ;; [Same code is also used in lispworks.lisp, openmcl.lisp]
- (remove-if #'(lambda (x)
- (not (member (socket x) active-internal-sockets)))
- sockets))))
+ ;; [Same code is also used in openmcl.lisp]
+ (dolist (x active-internal-sockets)
+ (setf (state (gethash x (wait-map wait-list)))
+ :READ))
+ wait-list)))
Modified: usocket/branches/new-wfi/backend/clisp.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/clisp.lisp (original)
+++ usocket/branches/new-wfi/backend/clisp.lisp Sun Jun 15 17:17:23 2008
@@ -127,23 +127,33 @@
(nth-value 1 (get-peer-name usocket)))
-(defmethod wait-for-input-internal (sockets &key timeout)
+(defun %setup-wait-list (wait-list)
+ (declare (ignore wait-list)))
+
+(defun %add-waiter (wait-list waiter)
+ (push (cons (socket waiter) NIL) (%wait wait-list)))
+
+(defun %remove-waiter (wait-list waiter)
+ (setf (%wait wait-list)
+ (remove (socket waiter) (%wait wait-list) :key #'car)))
+
+(defmethod wait-for-input-internal (wait-list &key timeout)
(with-mapped-conditions ()
(multiple-value-bind
(secs musecs)
(split-timeout (or timeout 1))
- (let* ((request-list (mapcar #'(lambda (x)
- (if (stream-server-usocket-p x)
- (socket x)
- (list (socket x) :input)))
- sockets))
- (status-list (if timeout
+ (dolist (x (%wait wait-list))
+ (setf (cdr x) :INPUT))
+ (let* ((status-list (if timeout
(socket:socket-status request-list secs musecs)
- (socket:socket-status request-list))))
- (remove nil
- (mapcar #'(lambda (x y)
- (when y x))
- sockets status-list))))))
+ (socket:socket-status request-list)))
+ (sockets (wait-list wait-list)))
+ (do* ((x (pop sockets) (pop sockets))
+ (y (pop status-list) (pop status-list)))
+ ((or (null sockets) (null status-list)))
+ (when y
+ (setf (state x) :READ)))
+ wait-list))))
;;
Modified: usocket/branches/new-wfi/backend/cmucl.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/cmucl.lisp (original)
+++ usocket/branches/new-wfi/backend/cmucl.lisp Sun Jun 15 17:17:23 2008
@@ -162,26 +162,35 @@
(defun get-host-name ()
(unix:unix-gethostname))
-(defun wait-for-input-internal (sockets &key timeout)
+(defun %setup-wait-list (wait-list)
+ (declare (ignore wait-list)))
+
+(defun %add-waiter (wait-list waiter)
+ (declare (ignore wait-list waiter)))
+
+(defun %remove-waiter (wait-list waiter)
+ (declare (ignore wait-list waiter)))
+
+(defun wait-for-input-internal (wait-list &key timeout)
(with-mapped-conditions ()
(alien:with-alien ((rfds (alien:struct unix:fd-set)))
(unix:fd-zero rfds)
- (dolist (socket sockets)
+ (dolist (socket (wait-list wait-list))
(unix:fd-set (socket socket) rfds))
(multiple-value-bind
(secs musecs)
(split-timeout (or timeout 1))
(multiple-value-bind
(count err)
- (unix:unix-fast-select (1+ (reduce #'max sockets
+ (unix:unix-fast-select (1+ (reduce #'max (wait-list wait-list)
:key #'socket))
(alien:addr rfds) nil nil
(when timeout secs) musecs)
(if (<= 0 count)
;; process the result...
- (remove-if #'(lambda (x)
- (not (unix:fd-isset (socket x) rfds)))
- sockets)
+ (dolist (x (wait-list wait-list))
+ (when (unix:fd-isset (socket x) rfds)
+ (setf (state x) :READ)))
(progn
;;###FIXME generate an error, except for EINTR
)))))))
Modified: usocket/branches/new-wfi/backend/lispworks.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/lispworks.lisp (original)
+++ usocket/branches/new-wfi/backend/lispworks.lisp Sun Jun 15 17:17:23 2008
@@ -169,21 +169,36 @@
;;;
#-win32
-(defun wait-for-input-internal (sockets &key timeout)
- (with-mapped-conditions ()
- ;; unfortunately, it's impossible to share code between
- ;; non-win32 and win32 platforms...
- ;; Can we have a sane -pref. complete [UDP!?]- API next time, please?
- (dolist (x sockets)
- (mp:notice-fd (os-socket-handle x)))
- (mp:process-wait-with-timeout "Waiting for a socket to become active"
- (truncate timeout)
- #'(lambda (socks)
- (some #'usocket-listen socks))
- sockets)
- (dolist (x sockets)
- (mp:unnotice-fd (os-socket-handle x)))
- (remove nil (mapcar #'usocket-listen sockets))))
+(progn
+
+ (defun %setup-wait-list (wait-list)
+ (declare (ignore wait-list)))
+
+ (defun %add-waiter (wait-list waiter)
+ (declare (ignore wait-list waiter)))
+
+ (defun %remove-waiter (wait-list waiter)
+ (declare (ignore wait-list waiter)))
+
+ (defun wait-for-input-internal (wait-list &key timeout)
+ (with-mapped-conditions ()
+ ;; unfortunately, it's impossible to share code between
+ ;; non-win32 and win32 platforms...
+ ;; Can we have a sane -pref. complete [UDP!?]- API next time, please?
+ (dolist (x (wait-list wait-list))
+ (mp:notice-fd (os-socket-handle x)))
+ (mp:process-wait-with-timeout "Waiting for a socket to become active"
+ (truncate timeout)
+ #'(lambda (socks)
+ (let (rv)
+ (dolist (x socks rv)
+ (when (usocket-listen x)
+ (setf (state x) :READ
+ rv t)))))
+ (wait-list wait-list))
+ (dolist (x (wait-list wait-list))
+ (mp:unnotice-fd (os-socket-handle x)))
+ wait-list)))
;;;
Modified: usocket/branches/new-wfi/backend/openmcl.lisp
==============================================================================
--- usocket/branches/new-wfi/backend/openmcl.lisp (original)
+++ usocket/branches/new-wfi/backend/openmcl.lisp Sun Jun 15 17:17:23 2008
@@ -32,21 +32,23 @@
(defun input-available-p (sockets &optional ticks-to-wait)
(ccl::rletZ ((tv :timeval))
(ccl::ticks-to-timeval ticks-to-wait tv)
+ ;;### The trickery below can be moved to the wait-list now...
(ccl::%stack-block ((infds ccl::*fd-set-size*))
(ccl::fd-zero infds)
(let ((max-fd -1))
(dolist (sock sockets)
- (let ((fd (openmcl-socket:socket-os-fd sock)))
+ (let ((fd (openmcl-socket:socket-os-fd (socket sock))))
(setf max-fd (max max-fd fd))
(ccl::fd-set fd infds)))
(let* ((res (#_select (1+ max-fd)
infds (ccl::%null-ptr) (ccl::%null-ptr)
(if ticks-to-wait tv (ccl::%null-ptr)))))
(when (> res 0)
- (remove-if #'(lambda (x)
- (not (ccl::fd-is-set (openmcl-socket:socket-os-fd x)
- infds)))
- sockets)))))))
+ (dolist (x sockets)
+ (when (ccl::fd-is-set (openmcl-socket:socket-os-fd (socket x))
+ infds)
+ (setf (state x) :READ))))
+ sockets)))))
(defun raise-error-from-id (condition-id socket real-condition)
(let ((usock-err (cdr (assoc condition-id +openmcl-error-map+))))
@@ -136,19 +138,23 @@
(list (hbo-to-vector-quad (openmcl-socket:lookup-hostname
(host-to-hostname name))))))
-(defun wait-for-input-internal (sockets &key timeout)
+
+(defun %setup-wait-list (wait-list)
+ (declare (ignore wait-list)))
+
+(defun %add-waiter (wait-list waiter)
+ (declare (ignore wait-list waiter)))
+
+(defun %remove-waiter (wait-list waiter)
+ (declare (ignore wait-list waiter)))
+
+(defun wait-for-input-internal (wait-list &key timeout)
(with-mapped-conditions ()
- (let* ((ticks-timeout (truncate (* (or timeout 1) ccl::*ticks-per-second*)))
+ (let* ((ticks-timeout (truncate (* (or timeout 1)
+ ccl::*ticks-per-second*)))
(active-internal-sockets
- (input-available-p (mapcar #'socket sockets)
+ (input-available-p wait-list
(when timeout ticks-timeout))))
- ;; this is quadratic, but hey, the active-internal-sockets
- ;; list is very short and it's only quadratic in the length of that one.
- ;; When I have more time I could recode it to something of linear
- ;; complexity.
- ;; [Same code is also used in lispworks.lisp, allegro.lisp]
- (remove-if #'(lambda (x)
- (not (member (socket x) active-internal-sockets)))
- sockets))))
+ wait-list)))
Modified: usocket/branches/new-wfi/usocket.lisp
==============================================================================
--- usocket/branches/new-wfi/usocket.lisp (original)
+++ usocket/branches/new-wfi/usocket.lisp Sun Jun 15 17:17:23 2008
@@ -15,7 +15,20 @@
((socket
:initarg :socket
:accessor socket
- :documentation "Implementation specific socket object instance."))
+ :documentation "Implementation specific socket object instance.'")
+ (state
+ :initform nil
+ :accessor state
+ :documentation "Per-socket return value for the `wait-for-input' function.
+
+The value stored in this slot can be any of
+ NIL - not ready
+ :READ - ready to read
+ :READ-WRITE - ready to read and write
+ :WRITE - ready to write
+
+The last two remain unused in the current version.
+"))
(:documentation
"The main socket class.
@@ -33,7 +46,7 @@
))
(:documentation
"Stream socket class.
-
+'
Contrary to other sockets, these sockets may be closed either
with the `socket-close' method or by closing the associated stream
(which can be retrieved with the `socket-stream' accessor)."))
@@ -201,10 +214,46 @@
,@body))
-(defgeneric wait-for-input (socket-or-sockets
- &key timeout)
- (:documentation
-"Waits for one or more streams to become ready for reading from
+(defstruct (wait-list (:constructor %make-wait-list))
+ (%wait ;; implementation specific
+ wait-list ;; the list of all usockets
+ wait-map ;; maps implementation sockets to usockets
+ ))
+
+;; Implementation specific:
+;;
+;; %setup-wait-list
+;; add-waiter
+;; remove-waiter
+
+(declaim (inline %setup-wait-list
+ %add-waiter
+ %remove-waiter))
+
+(defun make-wait-list (waiters)
+ (let ((wl (%make-wait-list)))
+ (setf (wait-map wl) (make-hash-table))
+ (%setup-wait-list wl)
+ (dolist (x waiters)
+ (add-waiter wl x))
+ wl))
+
+(defun add-waiter (wait-list input)
+ (setf (gethash (socket input) (wait-map wait-list)) input)
+ (pushnew input (wait-list wait-list))
+ (%add-waiter wait-list input))
+
+(defun remove-waiter (wait-list input)
+ (%remove-waiter wait-list input)
+ (setf (wait-list wait-list)
+ (remove input (wait-list wait-list)))
+ (remhash (socket input) (wait-map wait-list)))
+
+
+
+
+(defun wait-for-input (socket-or-sockets &key timeout ready-only)
+ "Waits for one or more streams to become ready for reading from
the socket. When `timeout' (a non-negative real number) is
specified, wait `timeout' seconds, or wait indefinitely when
it isn't specified. A `timeout' value of 0 (zero) means polling.
@@ -214,46 +263,51 @@
be returned for this value either when waiting timed out or when
it was interrupted (EINTR). The second value is a real number
indicating the time remaining within the timeout period or NIL if
-none."))
-
-
-(defmethod wait-for-input (socket-or-sockets &key timeout)
+none."
+ (unless (wait-list-p socket-or-sockets)
+ (let ((wl (make-wait-list (if (listp socket-or-sockets)
+ socket-or-sockets (list socket-or-sockets))
+ nil)))
+ (multiple-value-bind
+ (socks to)
+ (wait-for-input wl :timeout timeout :ready-only ready-only)
+ (return-from wait-for-input
+ (values (if ready-only socks socket-or-sockets) to)))))
(let* ((start (get-internal-real-time))
- (sockets (if (listp socket-or-sockets)
- socket-or-sockets
- (list socket-or-sockets)))
- ;; retrieve a list of all sockets which are ready without waiting
- (ready-sockets
- (remove-if (complement #'(lambda (x)
- (and (stream-usocket-p x)
- (listen (socket-stream x)))))
- sockets))
+ (sockets-ready 0))
+ (dolist (x (wait-list sockets))
+ (when (setf (state x)
+ (if (and (stream-usocket-p x)
+ (listen (socket-stream x)))
+ :READ NIL))
+ (incf sockets-ready)))
;; the internal routine is responsibe for
;; making sure the wait doesn't block on socket-streams of
- ;; which the socket isn't ready, but there's space left in the
+ ;; which theready- socket isn't ready, but there's space left in the
;; buffer
- (result (wait-for-input-internal
- sockets
- :timeout (if (null ready-sockets) timeout 0))))
- (values (union ready-sockets result)
- (when timeout
- (let ((elapsed (/ (- (get-internal-real-time) start)
- internal-time-units-per-second)))
- (when (< elapsed timeout)
- (- timeout elapsed)))))))
-
+ (wait-for-input-internal socket-or-sockets
+ :timeout (if (zerop sockets-ready) timeout 0))
+ (let ((to-result (when timeout
+ (let ((elapsed (/ (- (get-internal-real-time) start)
+ internal-time-units-per-second)))
+ (when (< elapsed timeout)
+ (- timeout elapsed))))))
+ (values (if ready-only
+ (remove-if #'null (wait-list socket-or-sockets) :key #'state)
+ socket-or-sockets)
+ to-result))))
;;
;; Data utility functions
;;
-(defun integer-to-octet-buffer (integer buffer octets &key (start 0))
+(defun integer-to-octready-et-buffer (integer buffer octets &key (start 0))
(do ((b start (1+ b))
(i (ash (1- octets) 3) ;; * 8
(- i 8)))
((> 0 i) buffer)
(setf (aref buffer b)
- (ldb (byte 8 i) integer))))
+ (ldb (byteready- 8 i) integer))))
(defun octet-buffer-to-integer (buffer octets &key (start 0))
(let ((integer 0))
@@ -369,7 +423,7 @@
(when hosts
(elt hosts (random (length hosts))))))
- (defun host-to-vector-quad (host)
+ (defun host-toready--vector-quad (host)
"Translate a host specification (vector quad, dotted quad or domain name)
to a vector quad."
(etypecase host
@@ -392,7 +446,7 @@
((vector t 4) (host-byte-order host))
(integer host))))
-;;
+;;ready-
;; Other utility functions
;;
@@ -416,7 +470,7 @@
;;
;; (defun SOCKET-CONNECT (host port &key element-type) ..)
;;
-
+ready-ready-
(setf (documentation 'socket-connect 'function)
"Connect to `host' on `port'. `host' is assumed to be a string or
an IP address represented in vector notation, such as #(192 168 1 1).
@@ -433,7 +487,7 @@
;;###FIXME: extend with default-element-type
(setf (documentation 'socket-listen 'function)
"Bind to interface `host' on `port'. `host' should be the
-representation of an interface address. The implementation is not
+representation of an ready-interface address. The implementation is not
required to do an address lookup, making no guarantees that hostnames
will be correctly resolved. If `*wildcard-host*' is passed for `host',
the socket will be bound to all available interfaces for the IPv4
@@ -447,4 +501,4 @@
streams to be created by `socket-accept'. `reuseaddress' is supported for
backward compatibility (but deprecated); when both `reuseaddress' and
`reuse-address' have been specified, the latter takes precedence.
-")
+")ready-ready-
1
0
Author: ehuelsmann
Date: Sun Jun 15 08:28:40 2008
New Revision: 342
Added:
usocket/branches/new-wfi/
- copied from r341, usocket/trunk/
Log:
Create new WAIT-FOR-INPUT branch, hopefully performing more to hhubner's expectations.
1
0
Author: ehuelsmann
Date: Sat Jun 14 14:32:57 2008
New Revision: 341
Modified:
usocket/trunk/backend/lispworks.lisp
Log:
Fix 2 issues:
1) MAPCAR doesn't take a :key argument,
2) use a stream-argument for LISTEN
Found by: binghe Chun Tian <binghe.lisp(a)gmail.com>
Modified: usocket/trunk/backend/lispworks.lisp
==============================================================================
--- usocket/trunk/backend/lispworks.lisp (original)
+++ usocket/trunk/backend/lispworks.lisp Sat Jun 14 14:32:57 2008
@@ -157,7 +157,7 @@
(defun usocket-listen (usocket)
(if (stream-usocket-p usocket)
- (when (listen (socket usocket))
+ (when (listen (socket-stream usocket))
usocket)
(when (comm::socket-listen (socket usocket))
usocket)))
@@ -174,15 +174,15 @@
;; unfortunately, it's impossible to share code between
;; non-win32 and win32 platforms...
;; Can we have a sane -pref. complete [UDP!?]- API next time, please?
- (mapcar #'mp:notice-fd sockets
- :key #'os-socket-handle)
+ (dolist (x sockets)
+ (mp:notice-fd (os-socket-handle x)))
(mp:process-wait-with-timeout "Waiting for a socket to become active"
(truncate timeout)
#'(lambda (socks)
(some #'usocket-listen socks))
sockets)
- (mapcar #'mp:unnotice-fd sockets
- :key #'os-socket-handle)
+ (dolist (x sockets)
+ (mp:unnotice-fd (os-socket-handle x)))
(remove nil (mapcar #'usocket-listen sockets))))
1
0
Author: ehuelsmann
Date: Thu Jun 12 15:46:00 2008
New Revision: 340
Modified:
public_html/api-docs.shtml (props changed)
public_html/feature-comparison.shtml (props changed)
public_html/implementation-comparison.shtml (props changed)
public_html/index.shtml (contents, props changed)
public_html/project-name (props changed)
public_html/style.css (props changed)
Log:
Set eol-style.
Modified: public_html/index.shtml
==============================================================================
--- public_html/index.shtml (original)
+++ public_html/index.shtml Thu Jun 12 15:46:00 2008
@@ -1,470 +1,470 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title><!--#include virtual="project-name" --></title>
- <link rel="stylesheet" type="text/css" href="style.css"/>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-</head>
-
-<body>
- <div class="header">
- <h1><!--#include virtual="project-name" --></h1>
- </div>
-
-<ul>
-<li><a href="#goal">Goal</a></li>
-<li><a href="#documentation">Documentation</a></li>
-<li><a href="#implementations">Supported implementations</a></li>
-<li><a href="#community">Community</a></li>
-<li><a href="#development">Development</a></li>
-<li><a href="#guarantees">Interface guarantees</a></li>
-<li><a href="#releases">Releases</a></li>
-<li><a href="#history">Project history</a></li>
-</ul>
-
-<h2><a name="goal">Goal</a></h2>
-
-<p>The project wants to provide a portable TCP/IP (and later on maybe
-UDP) socket interface for as many Common Lisp implementations as
-possible, while keeping the abstraction and portability layer as thin
-as possible. </p>
-
-<p>Because <a href="http://cliki.net/trivial-sockets">trivial-sockets</a>
-has been declared dead and its author has said he will declare usocket
-its successor if there is a zero effort path of migration, I'm <b>also working
-on <em>trivial-usocket</em></b> which is supposed to be a sub-optimal, but zero
-effort migration from trivial-sockets.</p>
-
-<p>If your lisp isn't mentioned in the list below, please feel free to
-submit a request for it at the mailing list mentioned below.</p>
-
-<h3>Comparison to other socket libraries</h3>
-
-<p>Since usocket is effectively the succesor to trivial-sockets, see the
- <a href="feature-comparison.shtml">feature comparison</a> with
- trivial-sockets in order to find out which one you should use.</p>
-
-<p>After starting the project, many others turned out to have worked on
- something alike, many times as part of a broader project or library.
- Some of them were known at the start of this project, others have
- been conceived after the usocket project already started. Not all of
- them have exactly the same portability goal.</p>
-
-<p>See the <a href="implementation-comparison.shtml">Implementation
- comparison</a> page for a comparison of the portability of other
- libaries and how that relates to usocket.</p>
-
-
-<h2><a name="documentation">Documentation</a></h2>
-
-<p>See the documentation page for the <a href="./api-docs.shtml">API description</a>.</p>
-
-<h2><a name="implementations">Supported implementations</a></h2>
-
-<p>Currently these implementations are supported:</p>
-
-<ul>
- <li>SBCL</li>
- <li>CMUCL</li>
- <li>Armedbear (0.0.10 and up)</li>
- <li>clisp</li>
- <li>Allegro</li>
- <li>LispWorks (5.0 and up)</li>
- <li>OpenMCL</li>
- <li>ECL</li>
- <li>Scieneer</li>
-</ul>
-
-<h2><a name="community">Community</a></h2>
-
- <p>This project has started Januari 2006. There isn't much of a community
- yet, though I'd like there to be one. So, you're invited to join
- the mailing list, announce yourself and even join the effort!
- </p>
-
-
- <p>Development discussion takes place on
- <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel">usocket-devel(a)common-lisp.net</a>.
- </p>
-
-<p>Project tracking happens in the <a href="http://trac.common-lisp.net/usocket">
- project's Trac setup</a>. Please take note of the guidelines before
- entering a bug or enhancement request into the database.</p>
-
-
-<div class="roadmap">
- <h2><a name="development">Development</a></h2>
-
- <p>Development will at least follow the steps outlined below.
- Yet to be determined is whether the currently mentioned steps will
- be enough to release version 1.0. Possibly, UDP sockets remain to be
- addressed before doing 1.0; that will depend on your reactions :-)
- </p>
- <p>The targeted implementations listed in the status table below are not
- a final list: others can be added if/when the need or interest arrises.
- </p>
- <p><a href="http://common-lisp.net/websvn/log.php?repname=usocket&path=%2Fusocket%2…"
- >Active development</a> is taking place in the
- <a href="http://subversion.tigris.org/">Subversion</a> repository.
- To be kept up to date, please
- <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel"
- >subscribe to the commit message mailing list</a>. To use the latest
- development version, make sure you have <a
- href="http://subversion.tigris.org/">Subversion</a> installed and
- execute this command:
- </p>
-
- <pre>
- $ svn checkout svn://common-lisp.net/project/usocket/svn/usocket/trunk usocket-svn
- </pre>
-
- <p>Please send patches, bug reports and suggestions to the development
- mailing list address given above. The table below indicates the
- current state of development.
- </p>
-
-<table rules="all" border="1" cellpadding="3" style="font-size:small">
- <caption style="font-weight:bold;font-size:large">Status for the currently targeted backends</caption>
- <thead class="roadmap-head">
- <tr>
- <th colspan="2">Major steps</th>
- <th colspan="9">Socket implementations</th>
- </tr>
- <tr>
- <th></th>
- <th>Minor steps</th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">SBCL</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">CMUCL</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">ABCL</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">clisp</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">Allegro</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">LispWorks</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">OpenMCL</a></th>
- <th>ECL</th>
- <th>Scieneer</th>
- </tr>
- </thead>
- <tbody>
- <tr style="border-width:2px;border-color:#000;">
- <td rowspan="5">Minimal active sockets support
- at the same level as provided by
- <a href="http://cliki.net/trivial-sockets">trivial-sockets</a>.<br />
- (Meaning streamed tcp traffic on connected sockets.)</td>
- <td><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…"
- >Investigate interfaces provided.</a></td>
- <td class="DONE">DONE</td> <!-- SBCL -->
- <td class="DONE">DONE</td> <!-- CMUCL -->
- <td class="DONE">DONE</td> <!-- ABCL -->
- <td class="DONE">DONE</td> <!-- clisp -->
- <td class="DONE">DONE</td> <!-- Allegro -->
- <td class="DONE">DONE</td> <!-- LispWorks -->
- <td class="DONE">DONE</td> <!-- OpenMCL -->
- <td class="DONE">DONE</td> <!-- ECL -->
- <td class="DONE">DONE</td> <!-- Scieneer -->
- </tr>
-
- <tr>
- <td>Identify socket errors generated.</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="No specific errors available">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- </tr>
- <tr>
- <td>Implement active socket support.</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implement remapping of implementation defined errors.</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implementation test-suite status</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- </tr>
- <tr>
- <td rowspan="3">Add functions to retrieve socket properties:<br />
- Local and remote IP address and port.</td>
- <td><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…"
- >Investigate interfaces provided</a></td>
- <td class="DONE">DONE</td> <!-- SBCL -->
- <td class="DONE">DONE</td> <!-- CMUCL -->
- <td class="DONE">DONE</td> <!-- ABCL -->
- <td class="DONE">DONE</td> <!-- clisp -->
- <td class="DONE">DONE</td> <!-- Allegro -->
- <td class="DONE">DONE</td> <!-- LispWorks -->
- <td class="DONE">DONE</td> <!-- OpenMCL -->
- <td class="DONE">DONE</td> <!-- ECL -->
- <td class="DONE">DONE</td> <!-- Scieneer -->
- </tr>
- <tr>
- <td>Implement it.</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implementation test-suite status</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- </tr>
- <tr>
- <td rowspan="3">Add support for passive (connection-accepting/server)
- sockets.</td>
- <td>Investigate interfaces provided</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- </tr>
- <tr>
- <td>Implement api calls listen and accept</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implement api calls get- and setsockopt (or equivalent).</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- </tr>
- <tr>
- <td rowspan="2">Implement efficient waiting for multiple sockets
- in one function call (select() like behaviour).</td>
- <td><a href="http://trac.common-lisp.net/usocket/wiki/SocketSelect">
- Investigate interfaces provided</a></td>
-
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE" title="missing on Win32">done</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implement wait-for-input api.</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE" title="missing on Win32">done</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td rowspan="2">Implement more uncommon api calls
- for tcp streams.</td>
- <td>send, recv</td>
-
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- </tr>
- <tr>
- <td>shutdown</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- </tr>
- <tr>
- <td rowspan="2">Implement udp socket support.</td>
- <td><a href="http://trac.common-lisp.net/usocket/wiki/DatagramSockets">
- Investigate API's provided</a></td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- </tr>
- <tr>
- <td>Build on top of that (or custom ffi).</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- </tr>
- </tbody>
-</table>
-</div>
-
-<h2><a name="guarantees">Interface guarantees</a></h2>
-
-<p>The interfaces currently published in the :export part of the
-package definition are guaranteed to stay compatible for the
-entire 0.x lifecycle. Extention in a backward compatible way is
-ofcourse valid, as is the addition of new interface functions.</p>
-
-<h2><a name="releases">Releases</a></h2>
-
-<h3>Current release</h3>
-<p>Releases are uploaded to the <a href="releases/">releases/</a>
- directory. You can find short descriptions in the table below:</p>
-
-<table>
-<caption>Release history</caption>
-<tr><th>Date</th><th>Release</th><th>Summary</th></tr>
-<tr><td>Sep 18, 2007</td>
- <td>0.3.5</td>
- <td>Implementation-dependent errors bleeding through, ECL get-host-name
- memory allocation fix/win32 compat fix, CLISP compile warnings fixes,
- SBCL compile warning/error fix, CLISP get-peer-name/get-local-name
- fixes</td></tr>
-<tr><td>Jul 25, 2007</td>
- <td>0.3.4</td>
- <td>Fix clisp get-host-name, multiple ECL fixes.</td></tr>
-<tr><td>Jun 05, 2007</td>
- <td>0.3.3</td>
- <td>Fix where host resolution routine was unable to resolve would return
- NIL instead of erroring.</td></tr>
-<tr><td>Mar 04, 2007</td>
- <td>0.3.2</td>
- <td>Fixes for many backends related to closing sockets.
- LispWorks fix for broken server sockets.
- API guarantee adjustments in preparation of porting Drakma.</td></tr>
-<tr><td>Feb 28, 2007</td>
- <td>0.3.1</td>
- <td>fixed with-server-socket; prevent creation of invalid sockets;
- 2 more convenience macros.</td></tr>
-<tr><td>Feb 26, 2007</td>
- <td>re-release</td>
- <td>Re-release of 0.2.3, 0.2.4, 0.2.5 and 0.3.0 tarballs
- because the originals included Subversion administration areas.</td></tr>
-<tr><td>Jan 21, 2007</td>
- <td><b>0.3.0</b></td><td><b>Server sockets</b></td></tr>
-<tr><td>Jan 19, 2007</td>
- <td>0.2.5</td><td>Allegro compilation fix.</td></tr>
-<tr><td>Jan 17, 2007</td>
- <td>0.2.4</td><td>Various fixes for CMUCL, OpenMCL, Allegro and LispWorks.
- </td></tr>
-<tr><td>Jan 04, 2007</td>
- <td>0.2.3</td><td>Add :element-type support to support stacking
- flexi-streams on socket streams for portable :external-format
- support.</td></tr>
-<tr><td>Jan 03, 2007</td>
- <td>0.2.2</td><td>Add ECL support and a small SBCL bugfix.</td></tr>
-<tr><td>Dec 21, 2006</td>
- <td>0.2.1</td><td>Remove 'open-stream' interface which is supposed
- to be provided by the 'trivial-usocket' package.</td></tr>
-<tr><td>Dec 18, 2006</td>
- <td>0.2.0</td><td>Add support for
- <a href="http://www.scieneer.com/scl/index.html">Scieneer
- Common Lisp</a>, fix <a
- href="http://trac.common-lisp.net/usocket/ticket/6">issue #6</a> and
- API preparation for server side sockets (not in this release)</td></tr>
-<tr><td>Feb 13, 2006</td>
-<td>0.1.0</td><td>Initial release</td></tr>
-</table>
-
-
-
-
-<h2><a name="history">Project history</a></h2>
-
-<p>Long ago the project was conceived and started by Erik Enge in an
-attempt to factor out all implementation specific sockets code from
-<a href="/project/cl-irc">cl-irc</a>. This 'long ago' must have been
-way before 2003 when I entered the cl-irc project.</p>
-
-<p>In january 2006, Erik Huelsmann found Erik Enge willing to donate
-the code he had still laying around to restart the project. The restart
-took place at the 27th of january when the old code was imported into the
-public repository.</p>
-
-<hr />
-
-<div style="float:left;font-size:x-small;font-weight:bold">
-Back to <a href="http://common-lisp.net/">Common-lisp.net</a>.
-</div>
- <div class="check" style="float:right">
- <a href="http://validator.w3.org/check/referer">Valid XHTML 1.0 Strict</a>
- </div>
-</body>
-</html>
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title><!--#include virtual="project-name" --></title>
+ <link rel="stylesheet" type="text/css" href="style.css"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+</head>
+
+<body>
+ <div class="header">
+ <h1><!--#include virtual="project-name" --></h1>
+ </div>
+
+<ul>
+<li><a href="#goal">Goal</a></li>
+<li><a href="#documentation">Documentation</a></li>
+<li><a href="#implementations">Supported implementations</a></li>
+<li><a href="#community">Community</a></li>
+<li><a href="#development">Development</a></li>
+<li><a href="#guarantees">Interface guarantees</a></li>
+<li><a href="#releases">Releases</a></li>
+<li><a href="#history">Project history</a></li>
+</ul>
+
+<h2><a name="goal">Goal</a></h2>
+
+<p>The project wants to provide a portable TCP/IP (and later on maybe
+UDP) socket interface for as many Common Lisp implementations as
+possible, while keeping the abstraction and portability layer as thin
+as possible. </p>
+
+<p>Because <a href="http://cliki.net/trivial-sockets">trivial-sockets</a>
+has been declared dead and its author has said he will declare usocket
+its successor if there is a zero effort path of migration, I'm <b>also working
+on <em>trivial-usocket</em></b> which is supposed to be a sub-optimal, but zero
+effort migration from trivial-sockets.</p>
+
+<p>If your lisp isn't mentioned in the list below, please feel free to
+submit a request for it at the mailing list mentioned below.</p>
+
+<h3>Comparison to other socket libraries</h3>
+
+<p>Since usocket is effectively the succesor to trivial-sockets, see the
+ <a href="feature-comparison.shtml">feature comparison</a> with
+ trivial-sockets in order to find out which one you should use.</p>
+
+<p>After starting the project, many others turned out to have worked on
+ something alike, many times as part of a broader project or library.
+ Some of them were known at the start of this project, others have
+ been conceived after the usocket project already started. Not all of
+ them have exactly the same portability goal.</p>
+
+<p>See the <a href="implementation-comparison.shtml">Implementation
+ comparison</a> page for a comparison of the portability of other
+ libaries and how that relates to usocket.</p>
+
+
+<h2><a name="documentation">Documentation</a></h2>
+
+<p>See the documentation page for the <a href="./api-docs.shtml">API description</a>.</p>
+
+<h2><a name="implementations">Supported implementations</a></h2>
+
+<p>Currently these implementations are supported:</p>
+
+<ul>
+ <li>SBCL</li>
+ <li>CMUCL</li>
+ <li>Armedbear (0.0.10 and up)</li>
+ <li>clisp</li>
+ <li>Allegro</li>
+ <li>LispWorks (5.0 and up)</li>
+ <li>OpenMCL</li>
+ <li>ECL</li>
+ <li>Scieneer</li>
+</ul>
+
+<h2><a name="community">Community</a></h2>
+
+ <p>This project has started Januari 2006. There isn't much of a community
+ yet, though I'd like there to be one. So, you're invited to join
+ the mailing list, announce yourself and even join the effort!
+ </p>
+
+
+ <p>Development discussion takes place on
+ <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel">usocket-devel(a)common-lisp.net</a>.
+ </p>
+
+<p>Project tracking happens in the <a href="http://trac.common-lisp.net/usocket">
+ project's Trac setup</a>. Please take note of the guidelines before
+ entering a bug or enhancement request into the database.</p>
+
+
+<div class="roadmap">
+ <h2><a name="development">Development</a></h2>
+
+ <p>Development will at least follow the steps outlined below.
+ Yet to be determined is whether the currently mentioned steps will
+ be enough to release version 1.0. Possibly, UDP sockets remain to be
+ addressed before doing 1.0; that will depend on your reactions :-)
+ </p>
+ <p>The targeted implementations listed in the status table below are not
+ a final list: others can be added if/when the need or interest arrises.
+ </p>
+ <p><a href="http://common-lisp.net/websvn/log.php?repname=usocket&path=%2Fusocket%2…"
+ >Active development</a> is taking place in the
+ <a href="http://subversion.tigris.org/">Subversion</a> repository.
+ To be kept up to date, please
+ <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel"
+ >subscribe to the commit message mailing list</a>. To use the latest
+ development version, make sure you have <a
+ href="http://subversion.tigris.org/">Subversion</a> installed and
+ execute this command:
+ </p>
+
+ <pre>
+ $ svn checkout svn://common-lisp.net/project/usocket/svn/usocket/trunk usocket-svn
+ </pre>
+
+ <p>Please send patches, bug reports and suggestions to the development
+ mailing list address given above. The table below indicates the
+ current state of development.
+ </p>
+
+<table rules="all" border="1" cellpadding="3" style="font-size:small">
+ <caption style="font-weight:bold;font-size:large">Status for the currently targeted backends</caption>
+ <thead class="roadmap-head">
+ <tr>
+ <th colspan="2">Major steps</th>
+ <th colspan="9">Socket implementations</th>
+ </tr>
+ <tr>
+ <th></th>
+ <th>Minor steps</th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">SBCL</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">CMUCL</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">ABCL</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">clisp</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">Allegro</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">LispWorks</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">OpenMCL</a></th>
+ <th>ECL</th>
+ <th>Scieneer</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr style="border-width:2px;border-color:#000;">
+ <td rowspan="5">Minimal active sockets support
+ at the same level as provided by
+ <a href="http://cliki.net/trivial-sockets">trivial-sockets</a>.<br />
+ (Meaning streamed tcp traffic on connected sockets.)</td>
+ <td><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…"
+ >Investigate interfaces provided.</a></td>
+ <td class="DONE">DONE</td> <!-- SBCL -->
+ <td class="DONE">DONE</td> <!-- CMUCL -->
+ <td class="DONE">DONE</td> <!-- ABCL -->
+ <td class="DONE">DONE</td> <!-- clisp -->
+ <td class="DONE">DONE</td> <!-- Allegro -->
+ <td class="DONE">DONE</td> <!-- LispWorks -->
+ <td class="DONE">DONE</td> <!-- OpenMCL -->
+ <td class="DONE">DONE</td> <!-- ECL -->
+ <td class="DONE">DONE</td> <!-- Scieneer -->
+ </tr>
+
+ <tr>
+ <td>Identify socket errors generated.</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="No specific errors available">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ </tr>
+ <tr>
+ <td>Implement active socket support.</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implement remapping of implementation defined errors.</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implementation test-suite status</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ </tr>
+ <tr>
+ <td rowspan="3">Add functions to retrieve socket properties:<br />
+ Local and remote IP address and port.</td>
+ <td><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…"
+ >Investigate interfaces provided</a></td>
+ <td class="DONE">DONE</td> <!-- SBCL -->
+ <td class="DONE">DONE</td> <!-- CMUCL -->
+ <td class="DONE">DONE</td> <!-- ABCL -->
+ <td class="DONE">DONE</td> <!-- clisp -->
+ <td class="DONE">DONE</td> <!-- Allegro -->
+ <td class="DONE">DONE</td> <!-- LispWorks -->
+ <td class="DONE">DONE</td> <!-- OpenMCL -->
+ <td class="DONE">DONE</td> <!-- ECL -->
+ <td class="DONE">DONE</td> <!-- Scieneer -->
+ </tr>
+ <tr>
+ <td>Implement it.</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implementation test-suite status</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ </tr>
+ <tr>
+ <td rowspan="3">Add support for passive (connection-accepting/server)
+ sockets.</td>
+ <td>Investigate interfaces provided</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ </tr>
+ <tr>
+ <td>Implement api calls listen and accept</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implement api calls get- and setsockopt (or equivalent).</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ </tr>
+ <tr>
+ <td rowspan="2">Implement efficient waiting for multiple sockets
+ in one function call (select() like behaviour).</td>
+ <td><a href="http://trac.common-lisp.net/usocket/wiki/SocketSelect">
+ Investigate interfaces provided</a></td>
+
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE" title="missing on Win32">done</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implement wait-for-input api.</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE" title="missing on Win32">done</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td rowspan="2">Implement more uncommon api calls
+ for tcp streams.</td>
+ <td>send, recv</td>
+
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ </tr>
+ <tr>
+ <td>shutdown</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ </tr>
+ <tr>
+ <td rowspan="2">Implement udp socket support.</td>
+ <td><a href="http://trac.common-lisp.net/usocket/wiki/DatagramSockets">
+ Investigate API's provided</a></td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ </tr>
+ <tr>
+ <td>Build on top of that (or custom ffi).</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2><a name="guarantees">Interface guarantees</a></h2>
+
+<p>The interfaces currently published in the :export part of the
+package definition are guaranteed to stay compatible for the
+entire 0.x lifecycle. Extention in a backward compatible way is
+ofcourse valid, as is the addition of new interface functions.</p>
+
+<h2><a name="releases">Releases</a></h2>
+
+<h3>Current release</h3>
+<p>Releases are uploaded to the <a href="releases/">releases/</a>
+ directory. You can find short descriptions in the table below:</p>
+
+<table>
+<caption>Release history</caption>
+<tr><th>Date</th><th>Release</th><th>Summary</th></tr>
+<tr><td>Sep 18, 2007</td>
+ <td>0.3.5</td>
+ <td>Implementation-dependent errors bleeding through, ECL get-host-name
+ memory allocation fix/win32 compat fix, CLISP compile warnings fixes,
+ SBCL compile warning/error fix, CLISP get-peer-name/get-local-name
+ fixes</td></tr>
+<tr><td>Jul 25, 2007</td>
+ <td>0.3.4</td>
+ <td>Fix clisp get-host-name, multiple ECL fixes.</td></tr>
+<tr><td>Jun 05, 2007</td>
+ <td>0.3.3</td>
+ <td>Fix where host resolution routine was unable to resolve would return
+ NIL instead of erroring.</td></tr>
+<tr><td>Mar 04, 2007</td>
+ <td>0.3.2</td>
+ <td>Fixes for many backends related to closing sockets.
+ LispWorks fix for broken server sockets.
+ API guarantee adjustments in preparation of porting Drakma.</td></tr>
+<tr><td>Feb 28, 2007</td>
+ <td>0.3.1</td>
+ <td>fixed with-server-socket; prevent creation of invalid sockets;
+ 2 more convenience macros.</td></tr>
+<tr><td>Feb 26, 2007</td>
+ <td>re-release</td>
+ <td>Re-release of 0.2.3, 0.2.4, 0.2.5 and 0.3.0 tarballs
+ because the originals included Subversion administration areas.</td></tr>
+<tr><td>Jan 21, 2007</td>
+ <td><b>0.3.0</b></td><td><b>Server sockets</b></td></tr>
+<tr><td>Jan 19, 2007</td>
+ <td>0.2.5</td><td>Allegro compilation fix.</td></tr>
+<tr><td>Jan 17, 2007</td>
+ <td>0.2.4</td><td>Various fixes for CMUCL, OpenMCL, Allegro and LispWorks.
+ </td></tr>
+<tr><td>Jan 04, 2007</td>
+ <td>0.2.3</td><td>Add :element-type support to support stacking
+ flexi-streams on socket streams for portable :external-format
+ support.</td></tr>
+<tr><td>Jan 03, 2007</td>
+ <td>0.2.2</td><td>Add ECL support and a small SBCL bugfix.</td></tr>
+<tr><td>Dec 21, 2006</td>
+ <td>0.2.1</td><td>Remove 'open-stream' interface which is supposed
+ to be provided by the 'trivial-usocket' package.</td></tr>
+<tr><td>Dec 18, 2006</td>
+ <td>0.2.0</td><td>Add support for
+ <a href="http://www.scieneer.com/scl/index.html">Scieneer
+ Common Lisp</a>, fix <a
+ href="http://trac.common-lisp.net/usocket/ticket/6">issue #6</a> and
+ API preparation for server side sockets (not in this release)</td></tr>
+<tr><td>Feb 13, 2006</td>
+<td>0.1.0</td><td>Initial release</td></tr>
+</table>
+
+
+
+
+<h2><a name="history">Project history</a></h2>
+
+<p>Long ago the project was conceived and started by Erik Enge in an
+attempt to factor out all implementation specific sockets code from
+<a href="/project/cl-irc">cl-irc</a>. This 'long ago' must have been
+way before 2003 when I entered the cl-irc project.</p>
+
+<p>In january 2006, Erik Huelsmann found Erik Enge willing to donate
+the code he had still laying around to restart the project. The restart
+took place at the 27th of january when the old code was imported into the
+public repository.</p>
+
+<hr />
+
+<div style="float:left;font-size:x-small;font-weight:bold">
+Back to <a href="http://common-lisp.net/">Common-lisp.net</a>.
+</div>
+ <div class="check" style="float:right">
+ <a href="http://validator.w3.org/check/referer">Valid XHTML 1.0 Strict</a>
+ </div>
+</body>
+</html>
1
0
Author: ehuelsmann
Date: Thu Jun 12 15:43:02 2008
New Revision: 339
Modified:
public_html/index.shtml
Log:
Update status table.
Modified: public_html/index.shtml
==============================================================================
--- public_html/index.shtml (original)
+++ public_html/index.shtml Thu Jun 12 15:43:02 2008
@@ -1,470 +1,470 @@
-<?xml version="1.0"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
- <title><!--#include virtual="project-name" --></title>
- <link rel="stylesheet" type="text/css" href="style.css"/>
- <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
-</head>
-
-<body>
- <div class="header">
- <h1><!--#include virtual="project-name" --></h1>
- </div>
-
-<ul>
-<li><a href="#goal">Goal</a></li>
-<li><a href="#documentation">Documentation</a></li>
-<li><a href="#implementations">Supported implementations</a></li>
-<li><a href="#community">Community</a></li>
-<li><a href="#development">Development</a></li>
-<li><a href="#guarantees">Interface guarantees</a></li>
-<li><a href="#releases">Releases</a></li>
-<li><a href="#history">Project history</a></li>
-</ul>
-
-<h2><a name="goal">Goal</a></h2>
-
-<p>The project wants to provide a portable TCP/IP (and later on maybe
-UDP) socket interface for as many Common Lisp implementations as
-possible, while keeping the abstraction and portability layer as thin
-as possible. </p>
-
-<p>Because <a href="http://cliki.net/trivial-sockets">trivial-sockets</a>
-has been declared dead and its author has said he will declare usocket
-its successor if there is a zero effort path of migration, I'm <b>also working
-on <em>trivial-usocket</em></b> which is supposed to be a sub-optimal, but zero
-effort migration from trivial-sockets.</p>
-
-<p>If your lisp isn't mentioned in the list below, please feel free to
-submit a request for it at the mailing list mentioned below.</p>
-
-<h3>Comparison to other socket libraries</h3>
-
-<p>Since usocket is effectively the succesor to trivial-sockets, see the
- <a href="feature-comparison.shtml">feature comparison</a> with
- trivial-sockets in order to find out which one you should use.</p>
-
-<p>After starting the project, many others turned out to have worked on
- something alike, many times as part of a broader project or library.
- Some of them were known at the start of this project, others have
- been conceived after the usocket project already started. Not all of
- them have exactly the same portability goal.</p>
-
-<p>See the <a href="implementation-comparison.shtml">Implementation
- comparison</a> page for a comparison of the portability of other
- libaries and how that relates to usocket.</p>
-
-
-<h2><a name="documentation">Documentation</a></h2>
-
-<p>See the documentation page for the <a href="./api-docs.shtml">API description</a>.</p>
-
-<h2><a name="implementations">Supported implementations</a></h2>
-
-<p>Currently these implementations are supported:</p>
-
-<ul>
- <li>SBCL</li>
- <li>CMUCL</li>
- <li>Armedbear (0.0.10 and up)</li>
- <li>clisp</li>
- <li>Allegro</li>
- <li>LispWorks (5.0 and up)</li>
- <li>OpenMCL</li>
- <li>ECL</li>
- <li>Scieneer</li>
-</ul>
-
-<h2><a name="community">Community</a></h2>
-
- <p>This project has started Januari 2006. There isn't much of a community
- yet, though I'd like there to be one. So, you're invited to join
- the mailing list, announce yourself and even join the effort!
- </p>
-
-
- <p>Development discussion takes place on
- <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel">usocket-devel(a)common-lisp.net</a>.
- </p>
-
-<p>Project tracking happens in the <a href="http://trac.common-lisp.net/usocket">
- project's Trac setup</a>. Please take note of the guidelines before
- entering a bug or enhancement request into the database.</p>
-
-
-<div class="roadmap">
- <h2><a name="development">Development</a></h2>
-
- <p>Development will at least follow the steps outlined below.
- Yet to be determined is whether the currently mentioned steps will
- be enough to release version 1.0. Possibly, UDP sockets remain to be
- addressed before doing 1.0; that will depend on your reactions :-)
- </p>
- <p>The targeted implementations listed in the status table below are not
- a final list: others can be added if/when the need or interest arrises.
- </p>
- <p><a href="http://common-lisp.net/websvn/log.php?repname=usocket&path=%2Fusocket%2…"
- >Active development</a> is taking place in the
- <a href="http://subversion.tigris.org/">Subversion</a> repository.
- To be kept up to date, please
- <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel"
- >subscribe to the commit message mailing list</a>. To use the latest
- development version, make sure you have <a
- href="http://subversion.tigris.org/">Subversion</a> installed and
- execute this command:
- </p>
-
- <pre>
- $ svn checkout svn://common-lisp.net/project/usocket/svn/usocket/trunk usocket-svn
- </pre>
-
- <p>Please send patches, bug reports and suggestions to the development
- mailing list address given above. The table below indicates the
- current state of development.
- </p>
-
-<table rules="all" border="1" cellpadding="3" style="font-size:small">
- <caption style="font-weight:bold;font-size:large">Status for the currently targeted backends</caption>
- <thead class="roadmap-head">
- <tr>
- <th colspan="2">Major steps</th>
- <th colspan="9">Socket implementations</th>
- </tr>
- <tr>
- <th></th>
- <th>Minor steps</th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">SBCL</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">CMUCL</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">ABCL</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">clisp</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">Allegro</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">LispWorks</a></th>
- <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">OpenMCL</a></th>
- <th>ECL</th>
- <th>Scieneer</th>
- </tr>
- </thead>
- <tbody>
- <tr style="border-width:2px;border-color:#000;">
- <td rowspan="5">Minimal active sockets support
- at the same level as provided by
- <a href="http://cliki.net/trivial-sockets">trivial-sockets</a>.<br />
- (Meaning streamed tcp traffic on connected sockets.)</td>
- <td><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…"
- >Investigate interfaces provided.</a></td>
- <td class="DONE">DONE</td> <!-- SBCL -->
- <td class="DONE">DONE</td> <!-- CMUCL -->
- <td class="DONE">DONE</td> <!-- ABCL -->
- <td class="DONE">DONE</td> <!-- clisp -->
- <td class="DONE">DONE</td> <!-- Allegro -->
- <td class="DONE">DONE</td> <!-- LispWorks -->
- <td class="DONE">DONE</td> <!-- OpenMCL -->
- <td class="DONE">DONE</td> <!-- ECL -->
- <td class="DONE">DONE</td> <!-- Scieneer -->
- </tr>
-
- <tr>
- <td>Identify socket errors generated.</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="No specific errors available">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- <td class="DONE" title="Implemented">DONE</td>
- </tr>
- <tr>
- <td>Implement active socket support.</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implement remapping of implementation defined errors.</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implementation test-suite status</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- </tr>
- <tr>
- <td rowspan="3">Add functions to retrieve socket properties:<br />
- Local and remote IP address and port.</td>
- <td><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…"
- >Investigate interfaces provided</a></td>
- <td class="DONE">DONE</td> <!-- SBCL -->
- <td class="DONE">DONE</td> <!-- CMUCL -->
- <td class="DONE">DONE</td> <!-- ABCL -->
- <td class="DONE">DONE</td> <!-- clisp -->
- <td class="DONE">DONE</td> <!-- Allegro -->
- <td class="DONE">DONE</td> <!-- LispWorks -->
- <td class="DONE">DONE</td> <!-- OpenMCL -->
- <td class="DONE">DONE</td> <!-- ECL -->
- <td class="DONE">DONE</td> <!-- Scieneer -->
- </tr>
- <tr>
- <td>Implement it.</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implementation test-suite status</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- <td class="PASS">PASS</td>
- </tr>
- <tr>
- <td rowspan="3">Add support for passive (connection-accepting/server)
- sockets.</td>
- <td>Investigate interfaces provided</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- </tr>
- <tr>
- <td>Implement api calls listen and accept</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td>Implement api calls get- and setsockopt (or equivalent).</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- </tr>
- <tr>
- <td rowspan="2">Implement efficient waiting for multiple sockets
- in one function call (select() like behaviour).</td>
- <td><a href="http://trac.common-lisp.net/usocket/wiki/SocketSelect">
- Investigate interfaces provided</a></td>
-
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="WIP" title="missing on Win32">(mostly) done</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="TODO">TODO</td>
- </tr>
- <tr>
- <td>Implement wait-for-input api.</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE" title="missing on Win32">done</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- <td class="DONE">DONE</td>
- </tr>
- <tr>
- <td rowspan="2">Implement more uncommon api calls
- for tcp streams.</td>
- <td>send, recv</td>
-
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- </tr>
- <tr>
- <td>shutdown</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- </tr>
- <tr>
- <td rowspan="2">Implement udp socket support.</td>
- <td><a href="http://trac.common-lisp.net/usocket/wiki/DatagramSockets">
- Investigate API's provided</a></td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- <td class="WIP">WIP</td>
- </tr>
- <tr>
- <td>Build on top of that (or custom ffi).</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- <td class="TODO">TODO</td>
- </tr>
- </tbody>
-</table>
-</div>
-
-<h2><a name="guarantees">Interface guarantees</a></h2>
-
-<p>The interfaces currently published in the :export part of the
-package definition are guaranteed to stay compatible for the
-entire 0.x lifecycle. Extention in a backward compatible way is
-ofcourse valid, as is the addition of new interface functions.</p>
-
-<h2><a name="releases">Releases</a></h2>
-
-<h3>Current release</h3>
-<p>Releases are uploaded to the <a href="releases/">releases/</a>
- directory. You can find short descriptions in the table below:</p>
-
-<table>
-<caption>Release history</caption>
-<tr><th>Date</th><th>Release</th><th>Summary</th></tr>
-<tr><td>Sep 18, 2007</td>
- <td>0.3.5</td>
- <td>Implementation-dependent errors bleeding through, ECL get-host-name
- memory allocation fix/win32 compat fix, CLISP compile warnings fixes,
- SBCL compile warning/error fix, CLISP get-peer-name/get-local-name
- fixes</td></tr>
-<tr><td>Jul 25, 2007</td>
- <td>0.3.4</td>
- <td>Fix clisp get-host-name, multiple ECL fixes.</td></tr>
-<tr><td>Jun 05, 2007</td>
- <td>0.3.3</td>
- <td>Fix where host resolution routine was unable to resolve would return
- NIL instead of erroring.</td></tr>
-<tr><td>Mar 04, 2007</td>
- <td>0.3.2</td>
- <td>Fixes for many backends related to closing sockets.
- LispWorks fix for broken server sockets.
- API guarantee adjustments in preparation of porting Drakma.</td></tr>
-<tr><td>Feb 28, 2007</td>
- <td>0.3.1</td>
- <td>fixed with-server-socket; prevent creation of invalid sockets;
- 2 more convenience macros.</td></tr>
-<tr><td>Feb 26, 2007</td>
- <td>re-release</td>
- <td>Re-release of 0.2.3, 0.2.4, 0.2.5 and 0.3.0 tarballs
- because the originals included Subversion administration areas.</td></tr>
-<tr><td>Jan 21, 2007</td>
- <td><b>0.3.0</b></td><td><b>Server sockets</b></td></tr>
-<tr><td>Jan 19, 2007</td>
- <td>0.2.5</td><td>Allegro compilation fix.</td></tr>
-<tr><td>Jan 17, 2007</td>
- <td>0.2.4</td><td>Various fixes for CMUCL, OpenMCL, Allegro and LispWorks.
- </td></tr>
-<tr><td>Jan 04, 2007</td>
- <td>0.2.3</td><td>Add :element-type support to support stacking
- flexi-streams on socket streams for portable :external-format
- support.</td></tr>
-<tr><td>Jan 03, 2007</td>
- <td>0.2.2</td><td>Add ECL support and a small SBCL bugfix.</td></tr>
-<tr><td>Dec 21, 2006</td>
- <td>0.2.1</td><td>Remove 'open-stream' interface which is supposed
- to be provided by the 'trivial-usocket' package.</td></tr>
-<tr><td>Dec 18, 2006</td>
- <td>0.2.0</td><td>Add support for
- <a href="http://www.scieneer.com/scl/index.html">Scieneer
- Common Lisp</a>, fix <a
- href="http://trac.common-lisp.net/usocket/ticket/6">issue #6</a> and
- API preparation for server side sockets (not in this release)</td></tr>
-<tr><td>Feb 13, 2006</td>
-<td>0.1.0</td><td>Initial release</td></tr>
-</table>
-
-
-
-
-<h2><a name="history">Project history</a></h2>
-
-<p>Long ago the project was conceived and started by Erik Enge in an
-attempt to factor out all implementation specific sockets code from
-<a href="/project/cl-irc">cl-irc</a>. This 'long ago' must have been
-way before 2003 when I entered the cl-irc project.</p>
-
-<p>In january 2006, Erik Huelsmann found Erik Enge willing to donate
-the code he had still laying around to restart the project. The restart
-took place at the 27th of january when the old code was imported into the
-public repository.</p>
-
-<hr />
-
-<div style="float:left;font-size:x-small;font-weight:bold">
-Back to <a href="http://common-lisp.net/">Common-lisp.net</a>.
-</div>
- <div class="check" style="float:right">
- <a href="http://validator.w3.org/check/referer">Valid XHTML 1.0 Strict</a>
- </div>
-</body>
-</html>
+<?xml version="1.0"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <title><!--#include virtual="project-name" --></title>
+ <link rel="stylesheet" type="text/css" href="style.css"/>
+ <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+</head>
+
+<body>
+ <div class="header">
+ <h1><!--#include virtual="project-name" --></h1>
+ </div>
+
+<ul>
+<li><a href="#goal">Goal</a></li>
+<li><a href="#documentation">Documentation</a></li>
+<li><a href="#implementations">Supported implementations</a></li>
+<li><a href="#community">Community</a></li>
+<li><a href="#development">Development</a></li>
+<li><a href="#guarantees">Interface guarantees</a></li>
+<li><a href="#releases">Releases</a></li>
+<li><a href="#history">Project history</a></li>
+</ul>
+
+<h2><a name="goal">Goal</a></h2>
+
+<p>The project wants to provide a portable TCP/IP (and later on maybe
+UDP) socket interface for as many Common Lisp implementations as
+possible, while keeping the abstraction and portability layer as thin
+as possible. </p>
+
+<p>Because <a href="http://cliki.net/trivial-sockets">trivial-sockets</a>
+has been declared dead and its author has said he will declare usocket
+its successor if there is a zero effort path of migration, I'm <b>also working
+on <em>trivial-usocket</em></b> which is supposed to be a sub-optimal, but zero
+effort migration from trivial-sockets.</p>
+
+<p>If your lisp isn't mentioned in the list below, please feel free to
+submit a request for it at the mailing list mentioned below.</p>
+
+<h3>Comparison to other socket libraries</h3>
+
+<p>Since usocket is effectively the succesor to trivial-sockets, see the
+ <a href="feature-comparison.shtml">feature comparison</a> with
+ trivial-sockets in order to find out which one you should use.</p>
+
+<p>After starting the project, many others turned out to have worked on
+ something alike, many times as part of a broader project or library.
+ Some of them were known at the start of this project, others have
+ been conceived after the usocket project already started. Not all of
+ them have exactly the same portability goal.</p>
+
+<p>See the <a href="implementation-comparison.shtml">Implementation
+ comparison</a> page for a comparison of the portability of other
+ libaries and how that relates to usocket.</p>
+
+
+<h2><a name="documentation">Documentation</a></h2>
+
+<p>See the documentation page for the <a href="./api-docs.shtml">API description</a>.</p>
+
+<h2><a name="implementations">Supported implementations</a></h2>
+
+<p>Currently these implementations are supported:</p>
+
+<ul>
+ <li>SBCL</li>
+ <li>CMUCL</li>
+ <li>Armedbear (0.0.10 and up)</li>
+ <li>clisp</li>
+ <li>Allegro</li>
+ <li>LispWorks (5.0 and up)</li>
+ <li>OpenMCL</li>
+ <li>ECL</li>
+ <li>Scieneer</li>
+</ul>
+
+<h2><a name="community">Community</a></h2>
+
+ <p>This project has started Januari 2006. There isn't much of a community
+ yet, though I'd like there to be one. So, you're invited to join
+ the mailing list, announce yourself and even join the effort!
+ </p>
+
+
+ <p>Development discussion takes place on
+ <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel">usocket-devel(a)common-lisp.net</a>.
+ </p>
+
+<p>Project tracking happens in the <a href="http://trac.common-lisp.net/usocket">
+ project's Trac setup</a>. Please take note of the guidelines before
+ entering a bug or enhancement request into the database.</p>
+
+
+<div class="roadmap">
+ <h2><a name="development">Development</a></h2>
+
+ <p>Development will at least follow the steps outlined below.
+ Yet to be determined is whether the currently mentioned steps will
+ be enough to release version 1.0. Possibly, UDP sockets remain to be
+ addressed before doing 1.0; that will depend on your reactions :-)
+ </p>
+ <p>The targeted implementations listed in the status table below are not
+ a final list: others can be added if/when the need or interest arrises.
+ </p>
+ <p><a href="http://common-lisp.net/websvn/log.php?repname=usocket&path=%2Fusocket%2…"
+ >Active development</a> is taking place in the
+ <a href="http://subversion.tigris.org/">Subversion</a> repository.
+ To be kept up to date, please
+ <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel"
+ >subscribe to the commit message mailing list</a>. To use the latest
+ development version, make sure you have <a
+ href="http://subversion.tigris.org/">Subversion</a> installed and
+ execute this command:
+ </p>
+
+ <pre>
+ $ svn checkout svn://common-lisp.net/project/usocket/svn/usocket/trunk usocket-svn
+ </pre>
+
+ <p>Please send patches, bug reports and suggestions to the development
+ mailing list address given above. The table below indicates the
+ current state of development.
+ </p>
+
+<table rules="all" border="1" cellpadding="3" style="font-size:small">
+ <caption style="font-weight:bold;font-size:large">Status for the currently targeted backends</caption>
+ <thead class="roadmap-head">
+ <tr>
+ <th colspan="2">Major steps</th>
+ <th colspan="9">Socket implementations</th>
+ </tr>
+ <tr>
+ <th></th>
+ <th>Minor steps</th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">SBCL</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">CMUCL</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">ABCL</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">clisp</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">Allegro</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">LispWorks</a></th>
+ <th><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…">OpenMCL</a></th>
+ <th>ECL</th>
+ <th>Scieneer</th>
+ </tr>
+ </thead>
+ <tbody>
+ <tr style="border-width:2px;border-color:#000;">
+ <td rowspan="5">Minimal active sockets support
+ at the same level as provided by
+ <a href="http://cliki.net/trivial-sockets">trivial-sockets</a>.<br />
+ (Meaning streamed tcp traffic on connected sockets.)</td>
+ <td><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…"
+ >Investigate interfaces provided.</a></td>
+ <td class="DONE">DONE</td> <!-- SBCL -->
+ <td class="DONE">DONE</td> <!-- CMUCL -->
+ <td class="DONE">DONE</td> <!-- ABCL -->
+ <td class="DONE">DONE</td> <!-- clisp -->
+ <td class="DONE">DONE</td> <!-- Allegro -->
+ <td class="DONE">DONE</td> <!-- LispWorks -->
+ <td class="DONE">DONE</td> <!-- OpenMCL -->
+ <td class="DONE">DONE</td> <!-- ECL -->
+ <td class="DONE">DONE</td> <!-- Scieneer -->
+ </tr>
+
+ <tr>
+ <td>Identify socket errors generated.</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="No specific errors available">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ <td class="DONE" title="Implemented">DONE</td>
+ </tr>
+ <tr>
+ <td>Implement active socket support.</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implement remapping of implementation defined errors.</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implementation test-suite status</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ </tr>
+ <tr>
+ <td rowspan="3">Add functions to retrieve socket properties:<br />
+ Local and remote IP address and port.</td>
+ <td><a href="http://common-lisp.net/websvn/filedetails.php?repname=usocket&path=%2Fu…"
+ >Investigate interfaces provided</a></td>
+ <td class="DONE">DONE</td> <!-- SBCL -->
+ <td class="DONE">DONE</td> <!-- CMUCL -->
+ <td class="DONE">DONE</td> <!-- ABCL -->
+ <td class="DONE">DONE</td> <!-- clisp -->
+ <td class="DONE">DONE</td> <!-- Allegro -->
+ <td class="DONE">DONE</td> <!-- LispWorks -->
+ <td class="DONE">DONE</td> <!-- OpenMCL -->
+ <td class="DONE">DONE</td> <!-- ECL -->
+ <td class="DONE">DONE</td> <!-- Scieneer -->
+ </tr>
+ <tr>
+ <td>Implement it.</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implementation test-suite status</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ <td class="PASS">PASS</td>
+ </tr>
+ <tr>
+ <td rowspan="3">Add support for passive (connection-accepting/server)
+ sockets.</td>
+ <td>Investigate interfaces provided</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ </tr>
+ <tr>
+ <td>Implement api calls listen and accept</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implement api calls get- and setsockopt (or equivalent).</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ </tr>
+ <tr>
+ <td rowspan="2">Implement efficient waiting for multiple sockets
+ in one function call (select() like behaviour).</td>
+ <td><a href="http://trac.common-lisp.net/usocket/wiki/SocketSelect">
+ Investigate interfaces provided</a></td>
+
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE" title="missing on Win32">done</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td>Implement wait-for-input api.</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE" title="missing on Win32">done</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ <td class="DONE">DONE</td>
+ </tr>
+ <tr>
+ <td rowspan="2">Implement more uncommon api calls
+ for tcp streams.</td>
+ <td>send, recv</td>
+
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ </tr>
+ <tr>
+ <td>shutdown</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ </tr>
+ <tr>
+ <td rowspan="2">Implement udp socket support.</td>
+ <td><a href="http://trac.common-lisp.net/usocket/wiki/DatagramSockets">
+ Investigate API's provided</a></td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ <td class="WIP">WIP</td>
+ </tr>
+ <tr>
+ <td>Build on top of that (or custom ffi).</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ <td class="TODO">TODO</td>
+ </tr>
+ </tbody>
+</table>
+</div>
+
+<h2><a name="guarantees">Interface guarantees</a></h2>
+
+<p>The interfaces currently published in the :export part of the
+package definition are guaranteed to stay compatible for the
+entire 0.x lifecycle. Extention in a backward compatible way is
+ofcourse valid, as is the addition of new interface functions.</p>
+
+<h2><a name="releases">Releases</a></h2>
+
+<h3>Current release</h3>
+<p>Releases are uploaded to the <a href="releases/">releases/</a>
+ directory. You can find short descriptions in the table below:</p>
+
+<table>
+<caption>Release history</caption>
+<tr><th>Date</th><th>Release</th><th>Summary</th></tr>
+<tr><td>Sep 18, 2007</td>
+ <td>0.3.5</td>
+ <td>Implementation-dependent errors bleeding through, ECL get-host-name
+ memory allocation fix/win32 compat fix, CLISP compile warnings fixes,
+ SBCL compile warning/error fix, CLISP get-peer-name/get-local-name
+ fixes</td></tr>
+<tr><td>Jul 25, 2007</td>
+ <td>0.3.4</td>
+ <td>Fix clisp get-host-name, multiple ECL fixes.</td></tr>
+<tr><td>Jun 05, 2007</td>
+ <td>0.3.3</td>
+ <td>Fix where host resolution routine was unable to resolve would return
+ NIL instead of erroring.</td></tr>
+<tr><td>Mar 04, 2007</td>
+ <td>0.3.2</td>
+ <td>Fixes for many backends related to closing sockets.
+ LispWorks fix for broken server sockets.
+ API guarantee adjustments in preparation of porting Drakma.</td></tr>
+<tr><td>Feb 28, 2007</td>
+ <td>0.3.1</td>
+ <td>fixed with-server-socket; prevent creation of invalid sockets;
+ 2 more convenience macros.</td></tr>
+<tr><td>Feb 26, 2007</td>
+ <td>re-release</td>
+ <td>Re-release of 0.2.3, 0.2.4, 0.2.5 and 0.3.0 tarballs
+ because the originals included Subversion administration areas.</td></tr>
+<tr><td>Jan 21, 2007</td>
+ <td><b>0.3.0</b></td><td><b>Server sockets</b></td></tr>
+<tr><td>Jan 19, 2007</td>
+ <td>0.2.5</td><td>Allegro compilation fix.</td></tr>
+<tr><td>Jan 17, 2007</td>
+ <td>0.2.4</td><td>Various fixes for CMUCL, OpenMCL, Allegro and LispWorks.
+ </td></tr>
+<tr><td>Jan 04, 2007</td>
+ <td>0.2.3</td><td>Add :element-type support to support stacking
+ flexi-streams on socket streams for portable :external-format
+ support.</td></tr>
+<tr><td>Jan 03, 2007</td>
+ <td>0.2.2</td><td>Add ECL support and a small SBCL bugfix.</td></tr>
+<tr><td>Dec 21, 2006</td>
+ <td>0.2.1</td><td>Remove 'open-stream' interface which is supposed
+ to be provided by the 'trivial-usocket' package.</td></tr>
+<tr><td>Dec 18, 2006</td>
+ <td>0.2.0</td><td>Add support for
+ <a href="http://www.scieneer.com/scl/index.html">Scieneer
+ Common Lisp</a>, fix <a
+ href="http://trac.common-lisp.net/usocket/ticket/6">issue #6</a> and
+ API preparation for server side sockets (not in this release)</td></tr>
+<tr><td>Feb 13, 2006</td>
+<td>0.1.0</td><td>Initial release</td></tr>
+</table>
+
+
+
+
+<h2><a name="history">Project history</a></h2>
+
+<p>Long ago the project was conceived and started by Erik Enge in an
+attempt to factor out all implementation specific sockets code from
+<a href="/project/cl-irc">cl-irc</a>. This 'long ago' must have been
+way before 2003 when I entered the cl-irc project.</p>
+
+<p>In january 2006, Erik Huelsmann found Erik Enge willing to donate
+the code he had still laying around to restart the project. The restart
+took place at the 27th of january when the old code was imported into the
+public repository.</p>
+
+<hr />
+
+<div style="float:left;font-size:x-small;font-weight:bold">
+Back to <a href="http://common-lisp.net/">Common-lisp.net</a>.
+</div>
+ <div class="check" style="float:right">
+ <a href="http://validator.w3.org/check/referer">Valid XHTML 1.0 Strict</a>
+ </div>
+</body>
+</html>
1
0
Author: ehuelsmann
Date: Tue Jun 10 15:13:40 2008
New Revision: 338
Modified:
public_html/index.shtml
Log:
Add reference to the project mailing list info page.
Modified: public_html/index.shtml
==============================================================================
--- public_html/index.shtml (original)
+++ public_html/index.shtml Tue Jun 10 15:13:40 2008
@@ -86,7 +86,7 @@
<p>Development discussion takes place on
- <a href="mailto:usocket-devel@common-lisp.net">usocket-devel(a)common-lisp.net</a>.
+ <a href="http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel">usocket-devel(a)common-lisp.net</a>.
</p>
<p>Project tracking happens in the <a href="http://trac.common-lisp.net/usocket">
1
0

28 May '08
Author: hhubner
Date: Wed May 28 05:41:46 2008
New Revision: 337
Modified:
usocket/branches/hans/ (props changed)
usocket/branches/hans/backend/sbcl.lisp
Log:
add ECL patch from Geo Carnoss, add piston properties
Modified: usocket/branches/hans/backend/sbcl.lisp
==============================================================================
--- usocket/branches/hans/backend/sbcl.lisp (original)
+++ usocket/branches/hans/backend/sbcl.lisp Wed May 28 05:41:46 2008
@@ -76,7 +76,7 @@
}" :one-liner nil :side-effects nil))
(defun read-select (read-fds to-secs &optional (to-musecs 0))
- (ffi:c-inline (read-fds to-secs to-musecs) (t t :unsigned-int) t
+ (ffi:c-inline (read-fds to-secs to-musecs) (t t :unsigned-int) (values t t)
"{
fd_set rfds;
cl_object cur_fd = #0;
@@ -86,10 +86,10 @@
FD_ZERO(&rfds);
while (CONSP(cur_fd)) {
- int fd = fixint(cur_fd->cons.car);
+ int fd = fixint(CAR(cur_fd));
max_fd = (max_fd > fd) ? max_fd : fd;
FD_SET(fd, &rfds);
- cur_fd = cur_fd->cons.cdr;
+ cur_fd = CDR(cur_fd);
}
if (#1 != Cnil) {
@@ -99,17 +99,17 @@
count = select(max_fd + 1, &rfds, NULL, NULL,
(#1 != Cnil) ? &tv : NULL);
- if (count == 0)
+ if (count == 0) {
@(return 0) = Cnil;
@(return 1) = Cnil;
- else if (count < 0)
+ } else if (count < 0) {
/*###FIXME: We should be raising an error here...
except, ofcourse in case of EINTR or EAGAIN */
@(return 0) = Cnil;
@(return 1) = MAKE_INTEGER(errno);
- else
+ } else
{
cl_object rv = Cnil;
cur_fd = #0;
@@ -120,11 +120,11 @@
Windows... */
while (CONSP(cur_fd)) {
- int fd = fixint(cur_fd->cons.car);
+ int fd = fixint(CAR(cur_fd));
if (FD_ISSET(fd, &rfds))
rv = CONS(MAKE_INTEGER(fd), rv);
- cur_fd = cur_fd->cons.cdr;
+ cur_fd = CDR(cur_fd);
}
@(return 0) = rv;
@(return 1) = Cnil;
@@ -152,6 +152,7 @@
. operation-not-permitted-error)
(sb-bsd-sockets:protocol-not-supported-error
. protocol-not-supported-error)
+ #-ecl
(sb-bsd-sockets:unknown-protocol
. protocol-not-supported-error)
(sb-bsd-sockets:socket-type-not-supported-error
@@ -161,6 +162,7 @@
(sb-bsd-sockets:socket-error . ,#'map-socket-error)
;; Nameservice errors: mapped to unknown-error
+ #-ecl #-ecl #-ecl
(sb-bsd-sockets:no-recovery-error . ns-no-recovery-error)
(sb-bsd-sockets:try-again-error . ns-try-again-condition)
(sb-bsd-sockets:host-not-found-error . ns-host-not-found-error)))
1
0
Author: hhubner
Date: Wed Apr 23 17:33:32 2008
New Revision: 336
Modified:
usocket/branches/hans/ (props changed)
Log:
Initialized merge tracking via "svnmerge" with revisions "1-332" from
svn+ssh://common-lisp.net/project/usocket/svn/usocket/trunk
1
0