ØMQ Manual - ØMQ/4.2.0


zmq_vmci - ØMQ transport over virtual machine communicatios interface (VMCI) sockets


The VMCI transport passes messages between VMware virtual machines running on the same host, between virtual machine and the host and within virtual machines (inter-process transport like ipc).

Communication between a virtual machine and the host is not supported on Mac OS X 10.9 and above.


A ØMQ endpoint is a string consisting of a transport :// followed by an address. The transport specifies the underlying protocol to use. The address specifies the transport-specific address to connect to.

For the VMCI transport, the transport is vmci, and the meaning of the address part is defined below.

Binding a socket

When binding a socket to a local address using zmq_bind() with the vmci transport, the endpoint shall be interpreted as an interface followed by a colon and the TCP port number to use.

An interface may be specified by either of the following:

  • The wild-card *, meaning all available interfaces.
  • An integer returned by VMCISock_GetLocalCID or @ (ZeroMQ will call VMCISock_GetLocalCID internally).

The port may be specified by:

  • A numeric value, usually above 1024 on POSIX systems.
  • The wild-card *, meaning a system-assigned ephemeral port.

Unbinding wild-card address from a socket

When wild-card * endpoint was used in zmq_bind(), the caller should use real endpoint obtained from the ZMQ_LAST_ENDPOINT socket option to unbind this endpoint from a socket using zmq_unbind().

Connecting a socket

When connecting a socket to a peer address using zmq_connect() with the vmci transport, the endpoint shall be interpreted as a peer address followed by a colon and the port number to use.

A peer address must be a CID of the peer.


Assigning a local address to a socket

//  VMCI port 5555 on all available interfaces
rc = zmq_bind(socket, "vmci://*:5555");
assert (rc == 0);
//  VMCI port 5555 on the local loop-back interface on all platforms
cid = VMCISock_GetLocalCID();
sprintf(endpoint, "vmci://%d:5555", cid);
rc = zmq_bind(socket, endpoint); assert (rc == 0);

Connecting a socket

//  Connecting using a CID
sprintf(endpoint, "vmci://%d:5555", cid);
rc = zmq_connect(socket, endpoint); assert (rc == 0);

See also

zmq_bind(3) zmq_connect(3) zmq_inproc(7) zmq_tcp(7) zmq_pgm(7) zmq_vmci(7) zmq_getsockopt(3) zmq(7)


This page was written by the ØMQ community. To make a change please read the ØMQ Contribution Policy at