Hi, Robert

I'm sorry for replying your mail so late - a bit busy these days.

Thanks, your patch fixed a bug in SOCKET-CONNECT: in my original design, if 
calling SOCKET-CONNECT without LOCAL-HOST and LOCAL-PORT keyword argument, the 
calling of bind() won't happen, but ... it seems that I calculate LOCAL-HOST / 
LOCAL-PORT too early, which caused the following protection block actually 
won't work:

(when (or local-host local-port)
  ...)

Any way, I've committed your fixes as r674. And consider this is a important 
fix, I'll make a new release as soon as possible.

Besides, I agree Anton's opinion that the bind problem could be solved by 
enabling SO_REUSEADDR on client sockets, but I'm not sure if it's necessary to 
add another keyword argument to SOCKET-CONNECT ... when Robert's issue would be 
solved by current solutions.

Regards,

Chun Tian (binghe)

在 2011-9-24,03:20, Robert Brown 写道:

> On Fri, Sep 23, 2011 at 2:59 PM, Anton Kovalenko <an...@sw4me.com>
> wrote:> Bind is not needed unless we want a specific interface or a
> specific> client port.
> Seems like a better patch is the following, which calls bind if
> local-hostor local-port are specified in the call to socket-connect.
> --- third_party/lisp/usocket/backend/sbcl.lisp.~1~    2011-08-12
> 16:23:26.718704693 -0400
> +++ third_party/lisp/usocket/backend/sbcl.lisp        2011-09-23
> 15:11:24.481814325 -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
> @@ -285,7 +284,9 @@
>               (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))
> +                (sb-bsd-sockets:socket-bind socket
> +                                            (host-to-vector-quad (or
> local-host *wildcard-host*))
> +                                            (or local-port *auto-port*)))
>               (with-mapped-conditions (usocket)
>               #+sbcl
>               (labels ((connect ()
> @@ -306,8 +307,7 @@
>              (:datagram
>               (when (or local-host local-port)
>                 (sb-bsd-sockets:socket-bind socket
> -                                            (host-to-vector-quad
> -                                             (or local-host *wildcard-host*))
> +                                            (host-to-vector-quad (or
> local-host *wildcard-host*))
>                                             (or local-port *auto-port*)))
>               (setf usocket (make-datagram-socket socket))
>               (when (and host port)
> 
> _______________________________________________
> usocket-devel mailing list
> usocket-devel@common-lisp.net
> http://lists.common-lisp.net/cgi-bin/mailman/listinfo/usocket-devel


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

Reply via email to