32 #if defined(ZMQ_HAVE_VMCI) 40 zmq::vmci_address_t::vmci_address_t(ctx_t *parent_) :
46 zmq::vmci_address_t::vmci_address_t(
const sockaddr *sa, socklen_t sa_len, ctx_t *parent_) :
52 if (sa->sa_family == parent->get_vmci_socket_family())
56 zmq::vmci_address_t::~vmci_address_t ()
60 int zmq::vmci_address_t::resolve(
const char *path_)
63 const char *delimiter = strrchr (path_,
':');
70 std::string addr_str (path_, delimiter - path_);
71 std::string port_str (delimiter + 1);
73 unsigned int cid = VMADDR_CID_ANY;
74 unsigned int port = VMADDR_PORT_ANY;
76 if (!addr_str.length()) {
80 else if (addr_str ==
"@") {
81 cid = VMCISock_GetLocalCID();
83 if (cid == VMADDR_CID_ANY) {
88 else if (addr_str !=
"*" && addr_str !=
"-1") {
89 const char *begin = addr_str.c_str();
91 unsigned long l = strtoul(begin, &end, 10);
93 if ((l == 0 && end == begin) || (l == ULONG_MAX && errno == ERANGE) || l > UINT_MAX)
99 cid =
static_cast<unsigned int> (l);
102 if (!port_str.length()) {
106 else if (port_str !=
"*" && port_str !=
"-1") {
107 const char *begin = port_str.c_str();
109 unsigned long l = strtoul(begin, &end, 10);
111 if ((l == 0 && end == begin) || (l == ULONG_MAX && errno == ERANGE) || l > UINT_MAX) {
116 port =
static_cast<unsigned int> (l);
119 address.svm_family =
static_cast<sa_family_t
> (parent->get_vmci_socket_family());
126 int zmq::vmci_address_t::to_string (std::string &addr_)
128 if (
address.svm_family != parent->get_vmci_socket_family()) {
137 if (
address.svm_cid == VMADDR_CID_ANY) {
147 if (
address.svm_port == VMADDR_PORT_ANY) {
158 const sockaddr *zmq::vmci_address_t::addr ()
const 160 return reinterpret_cast<const sockaddr*
> (&
address);
163 socklen_t zmq::vmci_address_t::addrlen ()
const 165 return static_cast<socklen_t
> (
sizeof address);