I think the socket-connect function in the SBCL backend
is incorrectly calling bind when creating a client stream
socket.

With the current code, when I create a lot of client stream
sockets on a Linux system, the bind call in socket-connect
eventually returns an error, address already in use.  I don't
think the bind call is needed for the client end of stream
sockets.

The following patch appears to fix the problem for me.

bob


--- backend/sbcl.lisp.~1~       2011-09-23 13:46:55.071765010 -0400
+++ backend/sbcl.lisp   2011-09-23 13:51:33.841811680 -0400
@@ -269,9 +269,8 @@
                                :protocol (case protocol
                                            (:stream :tcp)
                                            (:datagram :udp))))
-        (local-host (host-to-vector-quad (or local-host *wildcard-host*)))
-        (local-port (or local-port *auto-port*))
-        usocket ok)
+        (usocket nil)
+        (ok nil))
     (unwind-protect
          (progn
            (ecase protocol
@@ -284,8 +283,6 @@
               ;;         to pass compilation on ECL without it.
               (when (and nodelay-specified sockopt-tcp-nodelay-p)
                 (setf (sb-bsd-sockets::sockopt-tcp-nodelay socket) nodelay))
-              (when (or local-host local-port)
-                (sb-bsd-sockets:socket-bind socket local-host local-port))
               (with-mapped-conditions (usocket)
                #+(and sbcl (not win32))
                (labels ((connect ()

_______________________________________________
usocket-devel mailing list
usocket-devel@common-lisp.net
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel

Reply via email to