diff --git a/src/socks_connecter.cpp b/src/socks_connecter.cpp index d5aec659..a112dbf6 100644 --- a/src/socks_connecter.cpp +++ b/src/socks_connecter.cpp @@ -224,7 +224,7 @@ int zmq::socks_connecter_t::connect_to_proxy () // Automatic fallback to ipv4 is disabled here since this was the existing // behaviour, however I don't see a real reason for this. Maybe this can // be changed to true (and then the parameter can be removed entirely). - _s = tcp_open_socket (_addr->address.c_str (), options, false, + _s = tcp_open_socket (_addr->address.c_str (), options, false, false, _addr->resolved.tcp_addr); if (_s == retired_fd) { LIBZMQ_DELETE (_addr->resolved.tcp_addr); diff --git a/src/tcp.cpp b/src/tcp.cpp index a8dd4873..d9ac7eec 100644 --- a/src/tcp.cpp +++ b/src/tcp.cpp @@ -385,11 +385,12 @@ void zmq::tcp_tune_loopback_fast_path (const fd_t socket_) zmq::fd_t zmq::tcp_open_socket (const char *address_, const zmq::options_t &options_, + bool local_, bool fallback_to_ipv4_, zmq::tcp_address_t *out_tcp_addr_) { // Convert the textual address into address structure. - int rc = out_tcp_addr_->resolve (address_, true, options_.ipv6); + int rc = out_tcp_addr_->resolve (address_, local_, options_.ipv6); if (rc != 0) return retired_fd; @@ -400,7 +401,7 @@ zmq::fd_t zmq::tcp_open_socket (const char *address_, if (s == retired_fd && fallback_to_ipv4_ && out_tcp_addr_->family () == AF_INET6 && errno == EAFNOSUPPORT && options_.ipv6) { - rc = out_tcp_addr_->resolve (address_, false, false); + rc = out_tcp_addr_->resolve (address_, local_, false); if (rc != 0) { return retired_fd; } diff --git a/src/tcp.hpp b/src/tcp.hpp index 946dd42a..fbb61af3 100644 --- a/src/tcp.hpp +++ b/src/tcp.hpp @@ -79,6 +79,7 @@ void tcp_tune_loopback_fast_path (const fd_t socket_); // errno is set to an error code describing the cause of the error. fd_t tcp_open_socket (const char *address_, const options_t &options_, + bool local_, bool fallback_to_ipv4_, tcp_address_t *out_tcp_addr_); } diff --git a/src/tcp_connecter.cpp b/src/tcp_connecter.cpp index b1d01cad..1ddee544 100644 --- a/src/tcp_connecter.cpp +++ b/src/tcp_connecter.cpp @@ -174,7 +174,7 @@ int zmq::tcp_connecter_t::open () _addr->resolved.tcp_addr = new (std::nothrow) tcp_address_t (); alloc_assert (_addr->resolved.tcp_addr); - _s = tcp_open_socket (_addr->address.c_str (), options, true, + _s = tcp_open_socket (_addr->address.c_str (), options, false, true, _addr->resolved.tcp_addr); if (_s == retired_fd) { LIBZMQ_DELETE (_addr->resolved.tcp_addr); diff --git a/src/tcp_listener.cpp b/src/tcp_listener.cpp index 0f4b261b..fc6edf56 100644 --- a/src/tcp_listener.cpp +++ b/src/tcp_listener.cpp @@ -103,7 +103,7 @@ zmq::tcp_listener_t::get_socket_name (zmq::fd_t fd_, int zmq::tcp_listener_t::create_socket (const char *addr_) { - _s = tcp_open_socket (addr_, options, true, &_address); + _s = tcp_open_socket (addr_, options, true, true, &_address); if (_s == retired_fd) { return -1; }