URL:
<http://gna.org/bugs/?18922>
Summary: Server address binding fails
Project: Freeciv
Submitted by: cazfi
Submitted on: Fri 04 Nov 2011 11:24:47 PM EET
Category: None
Severity: 3 - Normal
Priority: 5 - Normal
Status: None
Assigned to: None
Originator Email:
Open/Closed: Open
Release:
Discussion Lock: Any
Operating System: None
Planned Release: 2.4.0, 2.5.0
_______________________________________________________
Details:
Rafał Mużyło reported folling in patch #2715:
0: bind failed: Cannot assign requested address
Some more information is also in patch #2997, most notably that this is
broken by patch #2933.
I've been reading code related (even one that is not part of it) to patch
#2933. Even if the patch works as designed (no implementation bugs) freeciv
has higher probability to fail with it than without. For security reasons
binding is iomplemented so that bind() of all addresses returned by
net_lookup_service() must success or operation as whole is considered fatal
failure. Before patch #2933 net_lookup_service() returned just one or two (one
IPv4 and one IPv6) addresses, now it returns all addresses that getaddrinfo()
returns.
One thing to test would be limit interfaces to bind by giving server
commandline parameter "-b", e.g., "-b localhost"
Antoher note is about error reporting. We report just the latest error, one
from attempt to listen last address in the list. Errors with earlier addresses
in the list are ignored, even though some of them may be more relevant one
(failing to listen the address that *should* success)
It might help to debug this if we get to know full list of addresses
net_lookup_service() is returning. There's call to sockaddr_debug() for each
address when bind has failed, but that function outputs only in loglevel
LOG_DEBUG. Maybe if one changes sockaddr_debug() calls to log_debug() to
log_normal() and then collects output, we get valuable information about what
kind of addresses we are trying to bind().
Yet another suspicios thing is what happens when there's both IPv4 and IPv6
address and system does not support IPV6_V6ONLY. Maybe binding of IPv6 address
causes binding of IPv4 address also, causing later explicit attempt to bind
IPv4 to fail - or vice versa.
_______________________________________________________
Reply to this item at:
<http://gna.org/bugs/?18922>
_______________________________________________
Message sent via/by Gna!
http://gna.org/
_______________________________________________
Freeciv-dev mailing list
[email protected]
https://mail.gna.org/listinfo/freeciv-dev