rsync 2.6.2 --daemon Problem
Gregory Symons
gsymons at gsconsulting.biz
Wed May 5 01:37:07 GMT 2004
Martin Kjeldsen said:
> Hi,
>
> I've a problem with rsync 2.6.2 and the daemon. I've installed it precisly
> as I did with 2.6.0 (I've tried before with 2.6.1 and was having the same
> problems as now with 2.6.2).
>
> When I try to a rsync --daemon command the rsync offcourse finishes, but in
> the log file it says
>
> 2004/05/04 21:15:10 [22369] rsyncd version 2.6.2 starting, listening on port
> 873
> 2004/05/04 21:15:10 [22369] rsync error: error in socket IO (code 10) at
> socket.c(466)
I've got the exact same problem here. For me at least,it appears that rsync is
trying to bind to the same address twice. Below is an excerpt from
'strace rsync --daemon':
socket(PF_INET6, SOCK_STREAM, IPPROTO_TCP) = 4
setsockopt(4, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
setsockopt(4, SOL_IPV6, 26, [1], 4) = -1 ENOPROTOOPT (Protocol not available)
bind(4, {sa_family=AF_INET6, sin6_port=htons(873), inet_pton(AF_INET6, "::", &sin6_addr), sin6_flowinfo=0, sin6_scope_id=0}, 28) = 0
socket(PF_INET, SOCK_STREAM, IPPROTO_TCP) = 5
setsockopt(5, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
bind(5, {sa_family=AF_INET, sin_port=htons(873), sin_addr=inet_addr("0.0.0.0")}, 16) = 0
listen(4, 5) = 0
listen(5, 5) = -1 EADDRINUSE (Address already in use)
close(4) = 0
close(5) = 0
I haven't really done any network programming, so I'm not exactly sure what's going on
in this section of the code, but it looks like rsync tries to set a flag on the IPV6
socket indicating that its only to be used for IPV6. In this case the IPV6 socket is for
the :: address, so when rsync starts to listen on that address, it also starts listening
on 0.0.0.0. However, it has also opened a separate IPV4 socket for 0.0.0.0, and when it
tries to listen on that socket, it gets back an error saying the address is in use, and
like a good little program, closes everything up and shuts down. Even though it's the one
using that address.
Looking at the code, the second call to setsockopt() is in an #ifdef'd section which looks for
#IPV6_V6ONLY. I have no idea where this macro is defined--I couldn't find it in config.h, which
is where I expected to find it. Of course socket.c doesn't include config.h anyway, so I really
have no idea:) Also, it doesn't look to me like there's anything that the code is doing wrong...
the problem is just that failing setsockopt() call which apparently is supposed to alleviate the
problem on systems where you have to specify that an IPV6 address is only for IPV6, and on those
that you don't, I would assume that it's not a problem.
Alright, now that I've found the problem, someone who knows how to fix it, fix it:) Or tell me that
I'm wrong about the problem--that's fine too:)
Greg
More information about the rsync
mailing list