good evening;
please find attached patches for the mcl back-end and the tests. the
system names follow from the local conventions for asdf systems, but
the other changes should be generally useful.
given these changes mcl 5.2 passes all 15. i cross-checked with
openmcl ("Version 1.3-r11936 (DarwinPPC32)") which succeded as well.
* test/test-usocket.lisp
: added timeout arguments to the no-connect tests, as both mcl and
openmcl otherwise hang
: added mcl to the caught conditions for failure tests
: wrapped typep tests to force t/nil
: corrected #\newline to be #\linefeed
: added a +local-ip+ variable
* test/usocket-test.asd
: changed dependencies to be fully qualified
* usocket.asd
: modified dependency to use cl-utilities (by fully qualified system
name)
* backend/mcl.lisp
: handle-condition : corrected to formulate the error argument as
required for the respective error class
: socket-connect : reinstated with-mapped-conditions
: socket-listen : reinstated with-mapped-conditions
: socket-accept : reinstated with-mapped-conditions
: %*-wait operators : added no-op versions
Index: test/test-usocket.lisp
===================================================================
--- test/test-usocket.lisp (revision 507)
+++ test/test-usocket.lisp (working copy)
@@ -7,12 +7,15 @@
;; The parameters below may need adjustments to match the system
;; the tests are run on.
-(defparameter +non-existing-host+ "192.168.1.1")
+(defparameter +non-existing-host+ "192.168.1.199")
(defparameter +unused-local-port+ 15213)
(defparameter *soc1* (usocket::make-stream-socket :socket :my-socket
:stream :my-stream))
(eval-when (:compile-toplevel :load-toplevel :execute)
- (defparameter +common-lisp-net+ #(80 68 86 115))) ;; common-lisp.net IP
+ (defparameter +local-ip+ #(192 168 1 25))
+ (defparameter +common-lisp-net+
+ #+ignore #(80 68 86 115) ;; common-lisp.net IP (not valid as of 2010-01-03
+ (first (usocket::get-hosts-by-name "common-lisp.net"))))
(defmacro with-caught-conditions ((expect throw) &body body)
`(catch 'caught-error
@@ -48,29 +51,29 @@
(deftest socket-no-connect.1
(with-caught-conditions ('usocket:socket-error nil)
- (usocket:socket-connect "127.0.0.0" +unused-local-port+)
+ (usocket:socket-connect "127.0.0.0" +unused-local-port+ :timeout 0)
t)
nil)
(deftest socket-no-connect.2
(with-caught-conditions ('usocket:socket-error nil)
- (usocket:socket-connect #(127 0 0 0) +unused-local-port+)
+ (usocket:socket-connect #(127 0 0 0) +unused-local-port+ :timeout 0)
t)
nil)
(deftest socket-no-connect.3
(with-caught-conditions ('usocket:socket-error nil)
- (usocket:socket-connect 2130706432 +unused-local-port+) ;; == #(127 0 0 0)
+ (usocket:socket-connect 2130706432 +unused-local-port+ :timeout 0) ;; ==
#(127 0 0 0)
t)
nil)
(deftest socket-failure.1
- (with-caught-conditions (#-(or cmu lispworks armedbear openmcl)
+ (with-caught-conditions (#-(or cmu lispworks armedbear openmcl mcl)
'usocket:network-unreachable-error
#+(or cmu lispworks armedbear)
'usocket:unknown-error
- #+openmcl
+ #+(or openmcl mcl)
'usocket:timeout-error
nil)
- (usocket:socket-connect 2130706432 +unused-local-port+) ;; == #(127 0 0 0)
+ (usocket:socket-connect 2130706432 +unused-local-port+ :timeout 0) ;; ==
#(127 0 0 0)
:unreach)
nil)
(deftest socket-failure.2
@@ -78,12 +81,12 @@
'usocket:unknown-error
#+cmu
'usocket:network-unreachable-error
- #+openmcl
+ #+(or openmcl mcl)
'usocket:timeout-error
- #-(or lispworks armedbear cmu openmcl)
+ #-(or lispworks armedbear cmu openmcl mcl)
'usocket:host-unreachable-error
nil)
- (usocket:socket-connect +non-existing-host+ 80) ;; 80 = just a port
+ (usocket:socket-connect +non-existing-host+ 80 :timeout 0) ;; 80 = just
a port
:unreach)
nil)
@@ -94,21 +97,21 @@
(with-caught-conditions (nil nil)
(let ((sock (usocket:socket-connect "common-lisp.net" 80)))
(unwind-protect
- (typep sock 'usocket:usocket)
+ (when (typep sock 'usocket:usocket) t)
(usocket:socket-close sock))))
t)
(deftest socket-connect.2
(with-caught-conditions (nil nil)
(let ((sock (usocket:socket-connect +common-lisp-net+ 80)))
(unwind-protect
- (typep sock 'usocket:usocket)
+ (when (typep sock 'usocket:usocket) t)
(usocket:socket-close sock))))
t)
(deftest socket-connect.3
(with-caught-conditions (nil nil)
(let ((sock (usocket:socket-connect (usocket::host-byte-order
+common-lisp-net+) 80)))
(unwind-protect
- (typep sock 'usocket:usocket)
+ (when (typep sock 'usocket:usocket) t)
(usocket:socket-close sock))))
t)
@@ -119,13 +122,13 @@
(unwind-protect
(progn
(format (usocket:socket-stream sock)
- "GET / HTTP/1.0~A~A~A~A"
- #\Return #\Newline #\Return #\Newline)
+ "GET / HTTP/1.0~c~c~c~c"
+ #\Return #\linefeed #\Return #\linefeed)
(force-output (usocket:socket-stream sock))
(read-line (usocket:socket-stream sock)))
(usocket:socket-close sock))))
- #+clisp "HTTP/1.1 200 OK"
- #-clisp #.(format nil "HTTP/1.1 200 OK~A" #\Return) nil)
+ #+(or mcl clisp) "HTTP/1.1 200 OK"
+ #-(or clisp mcl) #.(format nil "HTTP/1.1 200 OK~A" #\Return) nil)
(deftest socket-name.1
(with-caught-conditions (nil nil)
@@ -154,8 +157,10 @@
(unwind-protect
(usocket::get-local-address sock)
(usocket:socket-close sock))))
- #(192 168 1 65))
+ #.+local-ip+)
(defun run-usocket-tests ()
(do-tests))
+
+;;; (usoct::run-usocket-tests )
\ No newline at end of file
Index: test/usocket-test.asd
===================================================================
--- test/usocket-test.asd (revision 507)
+++ test/usocket-test.asd (working copy)
@@ -10,13 +10,13 @@
(in-package #:usocket-test-system)
-(defsystem usocket-test
- :name "usocket-test"
+(defsystem :net.common-lisp.usocket.test
:author "Erik Enge"
:version "0.1.0"
:licence "MIT"
:description "Tests for usocket"
- :depends-on (:usocket :rt)
+ :depends-on (:net.common-lisp.usocket
+ :edu.mit.rt)
:components ((:file "package")
(:file "test-usocket"
:depends-on ("package"))))
Index: usocket.asd
===================================================================
--- usocket.asd (revision 507)
+++ usocket.asd (working copy)
@@ -11,13 +11,17 @@
(in-package #:usocket-system)
+(pushnew :split-sequence-deprecated *features*)
+
(defsystem usocket
:name "usocket"
:author "Erik Enge & Erik Huelsmann"
:version "0.5.0-dev"
:licence "MIT"
:description "Universal socket library for Common Lisp"
- :depends-on (:split-sequence
+ :depends-on (;; :split-sequence
+ ;; use the splie-sequence from cl-utilities
+ :net.common-lisp.cl-utilities
#+sbcl :sb-bsd-sockets)
:components ((:file "package")
(:file "usocket"
Index: backend/mcl.lisp
===================================================================
--- backend/mcl.lisp (revision 507)
+++ backend/mcl.lisp (working copy)
@@ -9,7 +9,9 @@
(defun handle-condition (condition &optional socket)
; incomplete, needs to handle additional conditions
(flet ((raise-error (&optional socket-condition)
- (error (or socket-condition 'unknown-error) :socket socket
:real-error condition)))
+ (if socket-condition
+ (error socket-condition :socket socket)
+ (error 'unknown-error :socket socket :real-error condition))))
(typecase condition
(ccl:host-stopped-responding
(raise-error 'host-down-error))
@@ -20,24 +22,25 @@
(ccl:connection-timed-out
(raise-error 'timeout-error))
(ccl:opentransport-protocol-error
- (raise-error ''protocol-not-supported-error))
+ (raise-error 'protocol-not-supported-error))
(otherwise
(raise-error)))))
(defun socket-connect (host port &key (element-type 'character) timeout
deadline nodelay
local-host local-port)
- (let* ((socket
- (make-instance 'active-socket
- :remote-host (when host (host-to-hostname host))
- :remote-port port
- :local-host (when local-host (host-to-hostname
local-host))
- :local-port local-port
- :deadline deadline
- :nodelay nodelay
- :connect-timeout (and timeout (round (* timeout 60)))
- :element-type element-type))
- (stream (socket-open-stream socket)))
- (make-stream-socket :socket socket :stream stream)))
+ (with-mapped-conditions ()
+ (let* ((socket
+ (make-instance 'active-socket
+ :remote-host (when host (host-to-hostname host))
+ :remote-port port
+ :local-host (when local-host (host-to-hostname local-host))
+ :local-port local-port
+ :deadline deadline
+ :nodelay nodelay
+ :connect-timeout (and timeout (round (* timeout 60)))
+ :element-type element-type))
+ (stream (socket-open-stream socket)))
+ (make-stream-socket :socket socket :stream stream))))
(defun socket-listen (host port
&key reuseaddress
@@ -45,16 +48,18 @@
(backlog 5)
(element-type 'character))
(declare (ignore reuseaddress reuse-address-supplied-p))
- (let ((socket (make-instance 'passive-socket
- :local-port port
- :local-host host
- :reuse-address reuse-address
- :backlog backlog)))
+ (let ((socket (with-mapped-conditions ()
+ (make-instance 'passive-socket
+ :local-port port
+ :local-host host
+ :reuse-address reuse-address
+ :backlog backlog))))
(make-stream-server-socket socket :element-type element-type)))
(defmethod socket-accept ((usocket stream-server-usocket) &key element-type)
(let* ((socket (socket usocket))
- (stream (socket-accept socket :element-type element-type)))
+ (stream (with-mapped-conditions (usocket)
+ (socket-accept socket :element-type element-type))))
(make-stream-socket :socket socket :stream stream)))
(defmethod socket-close ((usocket usocket))
@@ -93,6 +98,17 @@
(defmethod get-peer-port ((usocket stream-usocket))
(remote-port (socket usocket)))
+
+(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)))
+
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; BASIC MCL SOCKET IMPLEMENTATION
_______________________________________________
usocket-devel mailing list
[email protected]
http://common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel