[usocket-cvs] r513 - usocket/trunk/backend

Chun Tian (binghe) ctian at common-lisp.net
Wed Jan 6 01:23:51 UTC 2010


Author: ctian
Date: Tue Jan  5 20:23:50 2010
New Revision: 513

Log:
Include MCL Issue 28.

Modified:
   usocket/trunk/backend/mcl.lisp

Modified: usocket/trunk/backend/mcl.lisp
==============================================================================
--- usocket/trunk/backend/mcl.lisp	(original)
+++ usocket/trunk/backend/mcl.lisp	Tue Jan  5 20:23:50 2010
@@ -6,35 +6,45 @@
 (eval-when (:compile-toplevel :load-toplevel :execute)
   (require :opentransport))
 
+;; MCL Issue 28: Passive TCP streams should be able to listen to the loopback interface
+;; see http://code.google.com/p/mcl/issues/detail?id=28 for details
+
+(defparameter *passive-interface-address* NIL
+  "Address to use for passive connections - optionally bind to loopback address while opening a tcp stream")
+
+(advise local-interface-ip-address
+  (or *passive-interface-address* (:do-it))
+  :when :around :name 'override-local-interface-ip-address)
+
 ;; MCL Issue 29: Passive TCP connections on OS assigned ports
 ;; see http://code.google.com/p/mcl/issues/detail?id=29 for details
-(ccl:advise ot-conn-tcp-passive-connect
-            (destructuring-bind (conn port &optional (allow-reuse t)) arglist
-              (declare (ignore allow-reuse))
-              (if (eql port #$kOTAnyInetAddress)
-		;; Avoids registering a proxy for port 0 but instead registers one for the true port:
-		(multiple-value-bind (proxy result)
-		    (let* ((*opentransport-class-proxies* NIL) ; makes ot-find-proxy return NIL
-			   (result (:do-it)) ;; pushes onto *opentransport-class-proxies*
-			   (proxy (prog1
-				      (pop *opentransport-class-proxies*)
-				    (assert (not *opentransport-class-proxies*))))
-			   (context (cdr proxy))
-			   (tmpconn (make-ot-conn :context context 
-						  :endpoint (pref context :ot-context.ref)))
-			   (localaddress (ot-conn-tcp-get-addresses tmpconn)))
-		      (declare (dynamic-extent tmpconn))
-		      ;; replace original set in body of function
-		      (setf (ot-conn-local-address conn) localaddress)
-		      (values
-		       (cons localaddress context)
-		       result))
-                  ;; need to be outside local binding of *opentransport-class-proxies* 
-                  (without-interrupts
-		      (push proxy *opentransport-class-proxies*))
-                  result)
-                (:do-it)))
-         :when :around :name 'ot-conn-tcp-passive-connect-any-address)
+(advise ot-conn-tcp-passive-connect
+  (destructuring-bind (conn port &optional (allow-reuse t)) arglist
+    (declare (ignore allow-reuse))
+    (if (eql port #$kOTAnyInetAddress)
+	;; Avoids registering a proxy for port 0 but instead registers one for the true port:
+	(multiple-value-bind (proxy result)
+	    (let* ((*opentransport-class-proxies* NIL) ; makes ot-find-proxy return NIL
+		   (result (:do-it)) ;; pushes onto *opentransport-class-proxies*
+		   (proxy (prog1
+			      (pop *opentransport-class-proxies*)
+			    (assert (not *opentransport-class-proxies*))))
+		   (context (cdr proxy))
+		   (tmpconn (make-ot-conn :context context 
+					  :endpoint (pref context :ot-context.ref)))
+		   (localaddress (ot-conn-tcp-get-addresses tmpconn)))
+	      (declare (dynamic-extent tmpconn))
+	      ;; replace original set in body of function
+	      (setf (ot-conn-local-address conn) localaddress)
+	      (values
+	       (cons localaddress context)
+	       result))
+	  ;; need to be outside local binding of *opentransport-class-proxies* 
+	  (without-interrupts
+	      (push proxy *opentransport-class-proxies*))
+	  result)
+	(:do-it)))
+  :when :around :name 'ot-conn-tcp-passive-connect-any-address)
 
 (in-package :usocket)
 




More information about the usocket-cvs mailing list