mirror of
https://github.com/zeromq/libzmq.git
synced 2025-03-22 20:03:56 +00:00
Merge pull request #116 from bluca/ipv6_downgrade
This commit is contained in:
commit
71050259f7
2
NEWS
2
NEWS
@ -17,6 +17,8 @@
|
|||||||
|
|
||||||
* Fixed #1877 - Avoid terminating connections prematurely
|
* 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
|
0MQ version 4.1.4 stable, released on 2015/12/18
|
||||||
================================================
|
================================================
|
||||||
|
@ -235,6 +235,21 @@ int zmq::tcp_connecter_t::open ()
|
|||||||
|
|
||||||
// Create the socket.
|
// Create the socket.
|
||||||
s = open_socket (tcp_addr->family (), SOCK_STREAM, IPPROTO_TCP);
|
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
|
#ifdef ZMQ_HAVE_WINDOWS
|
||||||
if (s == INVALID_SOCKET) {
|
if (s == INVALID_SOCKET) {
|
||||||
errno = wsa_error_to_errno (WSAGetLastError ());
|
errno = wsa_error_to_errno (WSAGetLastError ());
|
||||||
|
@ -167,19 +167,15 @@ int zmq::tcp_listener_t::set_address (const char *addr_)
|
|||||||
|
|
||||||
// Create a listening socket.
|
// Create a listening socket.
|
||||||
s = open_socket (address.family (), SOCK_STREAM, IPPROTO_TCP);
|
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.
|
// IPv6 address family not supported, try automatic downgrade to IPv4.
|
||||||
if (address.family () == AF_INET6
|
if (s == -1 && address.family () == AF_INET6
|
||||||
&& errno == EAFNOSUPPORT
|
&& errno == EAFNOSUPPORT
|
||||||
&& options.ipv6) {
|
&& options.ipv6) {
|
||||||
rc = address.resolve (addr_, true, true);
|
rc = address.resolve (addr_, true, false);
|
||||||
if (rc != 0)
|
if (rc != 0)
|
||||||
return rc;
|
return rc;
|
||||||
s = ::socket (address.family (), SOCK_STREAM, IPPROTO_TCP);
|
s = open_socket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ZMQ_HAVE_WINDOWS
|
#ifdef ZMQ_HAVE_WINDOWS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user