Hello Willy.

On 22 September 2011 22:08, Willy Tarreau <w...@1wt.eu> wrote:
> Wow, you've hit an amazing bug. I seem to remember we touched that
> area reacently when a server port was ignored. I'll have a look at
> this, because it's very likely that we fixed it wrong.

Thanks. I had another look at it today, but didn't make much progress.

Attempting to work around the problem, I experimented with not setting
the SRV_MAPPORTS flag when there is no port specified in the server
directive - simply commenting-out the else clause on lines 3933-3934
of cfgparse.c. I then added a test for
   ((struct sockaddr_in *)&s->req->cons->addr.s.to)->sin_port == 0
in assign_server_address(), and copying the port from
   s->req->prod->addr.c.to
to
   s->req->cons->addr.s.to

Interestingly, this works when HAProxy is run in debug mode, but not
as a daemon. In the latter case, it seems that some of the structure
elements are not set - in particular s->req->prod->addr.c.to.ss_family
and &s->req->prod->addr.c.to->sin_port.

I'm not sure if that's expected behaviour when the session structure
doesn't have SRV_MAPPORTS set, but it was certainly confusing!

Thanks for your help.
Nick.

-- 
Nick Chalk.

Loadbalancer.org Ltd.
Phone: +44 (0)870 443 8779
http://www.loadbalancer.org/

Reply via email to