7 #if defined(ZMQ_HAVE_VMCI)
15 zmq::vmci_address_t::vmci_address_t ()
20 zmq::vmci_address_t::vmci_address_t (ctx_t *parent_) : parent (parent_)
25 zmq::vmci_address_t::vmci_address_t (
const sockaddr *sa,
33 if (sa->sa_family == parent->get_vmci_socket_family ())
37 int zmq::vmci_address_t::resolve (
const char *path_)
40 const char *delimiter = strrchr (path_,
':');
50 unsigned int cid = VMADDR_CID_ANY;
51 unsigned int port = VMADDR_PORT_ANY;
53 if (!addr_str.length ()) {
56 }
else if (addr_str ==
"@") {
57 cid = VMCISock_GetLocalCID ();
59 if (cid == VMADDR_CID_ANY) {
63 }
else if (addr_str !=
"*" && addr_str !=
"-1") {
64 const char *
begin = addr_str.c_str ();
66 unsigned long l = strtoul (
begin, &
end, 10);
68 if ((l == 0 &&
end ==
begin) || (l == ULONG_MAX &&
errno == ERANGE)
74 cid =
static_cast<unsigned int> (l);
77 if (!port_str.length ()) {
80 }
else if (port_str !=
"*" && port_str !=
"-1") {
81 const char *
begin = port_str.c_str ();
83 unsigned long l = strtoul (
begin, &
end, 10);
85 if ((l == 0 &&
end ==
begin) || (l == ULONG_MAX &&
errno == ERANGE)
91 port =
static_cast<unsigned int> (l);
95 static_cast<sa_family_t
> (parent->get_vmci_socket_family ());
102 int zmq::vmci_address_t::to_string (
std::string &addr_)
const
104 if (
address.svm_family != parent->get_vmci_socket_family ()) {
113 if (
address.svm_cid == VMADDR_CID_ANY) {
121 if (
address.svm_port == VMADDR_PORT_ANY) {
131 const sockaddr *zmq::vmci_address_t::addr ()
const
133 return reinterpret_cast<const sockaddr *
> (&
address);
136 socklen_t zmq::vmci_address_t::addrlen ()
const
138 return static_cast<socklen_t
> (
sizeof address);
141 #if defined ZMQ_HAVE_WINDOWS
142 unsigned short zmq::vmci_address_t::family ()
const
144 sa_family_t zmq::vmci_address_t::family ()
const
147 return parent->get_vmci_socket_family ();