Revert "unix: only set SO_REUSEADDR when bind() fails"

This reverts commit a9e95a33bc.

This seems to cause regressions in the test suite when IPv6 is disabled.

As optimizations go, it's a very minor one so let's not spend too much
effort trying to track down the cause of the regressions but revert the
change before it makes its way into a release.

PR-URL: https://github.com/libuv/libuv/pull/92
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
This commit is contained in:
Ben Noordhuis 2014-12-29 04:25:16 +01:00
parent a09e77e180
commit ebc50aee1d

View File

@ -62,7 +62,6 @@ int uv__tcp_bind(uv_tcp_t* tcp,
unsigned int flags) {
int err;
int on;
int fd;
/* Cannot set IPv6-only mode on non-IPv6 socket. */
if ((flags & UV_TCP_IPV6ONLY) && addr->sa_family != AF_INET6)
@ -74,29 +73,26 @@ int uv__tcp_bind(uv_tcp_t* tcp,
if (err)
return err;
fd = tcp->io_watcher.fd;
on = 1;
if (setsockopt(tcp->io_watcher.fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)))
return -errno;
#ifdef IPV6_V6ONLY
if (addr->sa_family == AF_INET6) {
on = (flags & UV_TCP_IPV6ONLY) != 0;
if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)))
if (setsockopt(tcp->io_watcher.fd,
IPPROTO_IPV6,
IPV6_V6ONLY,
&on,
sizeof on) == -1) {
return -errno;
}
}
#endif
if (bind(fd, addr, addrlen)) {
if (errno != EADDRINUSE)
return -errno;
on = 1;
if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)))
return -errno;
errno = 0;
if (bind(fd, addr, addrlen) && errno != EADDRINUSE)
return -errno;
}
errno = 0;
if (bind(tcp->io_watcher.fd, addr, addrlen) && errno != EADDRINUSE)
return -errno;
tcp->delayed_error = -errno;
if (addr->sa_family == AF_INET6)