Forgot to add the ML :/

On 01/16/2016 07:43 PM, Nenad Merdanovic wrote:
> Hello Robert,
> 
> + Baptiste
> 
>>
>> Connect() failed for backend bk: no free ports.
>>
>> If you comment out either the load-server-state-from-file line or remove 
>> 'resolvers dns' from the end of the server line, then the backend works 
>> correctly.
>>
> 
> This happens because of:
> server.c:2156
> /* update server IP only if DNS resolution is used on the server */
>     if (srv->resolution) {
>         memset(&addr, 0, sizeof(struct sockaddr_storage));
>         if (str2ip2(params[0], &addr, 0))
>             memcpy(&srv->addr, &addr, sizeof(struct sockaddr_storage));
> 
> str2ip2 doesn't work with ports (and there are none in the dump file),
> yet we overwrite the whole struct.
> 
> Few options I see:
> 1. Dump the port to the state file, use str2sa_range
> 2. Check the ss_family of 'addr', memcpy only the address
> 
> And my personal favorite
> 3. Just (ab)use something like "server_parse_addr_change_request(srv,
> params[0]);" with a small change so it accepts the 'updater' also, which
> could say 'server-state' or something.
> 
>> The same behaviour with 1.7-dev1, and I encounter the issue on Linux and OSX.
>>
>> It’s worth noting that "show servers state" returns nothing if there are a 
>> lot of backends, hence I’m using the 'local' option.
>>
>>
>> B.
>>
> 
> Regards,
> Nenad
> 

Reply via email to