Merge pull request #116 from bluca/ipv6_downgrade

This commit is contained in:
Constantin Rack 2016-04-07 18:30:13 +02:00
commit 71050259f7
3 changed files with 20 additions and 7 deletions

2
NEWS
View File

@ -17,6 +17,8 @@
* Fixed #1877 - Avoid terminating connections prematurely
* Fixed #1887 - zmq_bind IPv4 fallback still tries IPv6
0MQ version 4.1.4 stable, released on 2015/12/18
================================================

View File

@ -235,6 +235,21 @@ int zmq::tcp_connecter_t::open ()
// Create the socket.
s = open_socket (tcp_addr->family (), SOCK_STREAM, IPPROTO_TCP);
// IPv6 address family not supported, try automatic downgrade to IPv4.
if (s == -1 && tcp_addr->family () == AF_INET6
&& errno == EAFNOSUPPORT
&& options.ipv6) {
rc = addr->resolved.tcp_addr->resolve (
addr->address.c_str (), false, false);
if (rc != 0) {
delete addr->resolved.tcp_addr;
addr->resolved.tcp_addr = NULL;
return -1;
}
s = open_socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
}
#ifdef ZMQ_HAVE_WINDOWS
if (s == INVALID_SOCKET) {
errno = wsa_error_to_errno (WSAGetLastError ());

View File

@ -167,19 +167,15 @@ int zmq::tcp_listener_t::set_address (const char *addr_)
// Create a listening socket.
s = open_socket (address.family (), SOCK_STREAM, IPPROTO_TCP);
#ifdef ZMQ_HAVE_WINDOWS
if (s == INVALID_SOCKET)
errno = wsa_error_to_errno (WSAGetLastError ());
#endif
// IPv6 address family not supported, try automatic downgrade to IPv4.
if (address.family () == AF_INET6
if (s == -1 && address.family () == AF_INET6
&& errno == EAFNOSUPPORT
&& options.ipv6) {
rc = address.resolve (addr_, true, true);
rc = address.resolve (addr_, true, false);
if (rc != 0)
return rc;
s = ::socket (address.family (), SOCK_STREAM, IPPROTO_TCP);
s = open_socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
}
#ifdef ZMQ_HAVE_WINDOWS