13 #ifndef ZMQ_HAVE_WINDOWS
14 #include <sys/types.h>
15 #include <arpa/inet.h>
22 _bind_interface (-1), _is_multicast (
false)
35 bool has_interface =
false;
41 const char *src_delimiter = strrchr (
name_,
';');
59 const int rc = src_resolver.
resolve (&_bind_address, src_name.c_str ());
65 if (_bind_address.is_multicast ()) {
76 if (src_name ==
"*") {
79 #ifdef HAVE_IF_NAMETOINDEX
80 _bind_interface = if_nametoindex (src_name.c_str ());
81 if (_bind_interface == 0) {
89 name_ = src_delimiter + 1;
102 const int rc = resolver.
resolve (&_target_address,
name_);
107 _is_multicast = _target_address.is_multicast ();
108 const uint16_t port = _target_address.port ();
113 if (!_is_multicast) {
118 _bind_address.set_port (port);
125 if (_is_multicast || !bind_) {
127 _bind_address.set_port (port);
133 _bind_address = _target_address;
137 if (_bind_address.family () != _target_address.family ()) {
144 if (ipv6_ && _is_multicast && _bind_interface < 0) {
154 return _bind_address.family ();
159 return _is_multicast;
164 return &_bind_address;
169 return _bind_interface;
174 return &_target_address;