A 0MQ 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.
When assigning a local address to a socket using zmq_bind() with the tcp 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 TCP port number may be specified by:
When using ephemeral ports, the caller should retrieve the actual assigned port using the ZMQ_LAST_ENDPOINT socket option. See zmq_getsockopt(3) for details.
When connecting a socket to a peer address using zmq_connect() with the tcp transport, the endpoint shall be interpreted as a peer address followed by a colon and the TCP port number to use. You can optionally specify a source_endpoint which will be used as the source address for your connection; tcp://source_endpoint;'endpoint', see the interface description above for details.
A peer address may be specified by either of the following:
Note: A description of the ZeroMQ Message Transport Protocol (ZMTP) which is used by the TCP transport can be found at m[blue]http://rfc.zeromq.org/spec:15m
For the TCP transport, the high water mark (HWM) mechanism works in conjunction with the TCP socket buffers handled at OS level. Depending on the OS and several other factors the size of such TCP buffers will be different. Moreover TCP buffers provided by the OS will accomodate a varying number of messages depending on the size of messages (unlike ZMQ HWM settings the TCP socket buffers are measured in bytes and not messages).
This may result in apparently inexplicable behaviors: e.g., you may expect that setting ZMQ_SNDHWM to 100 on a socket using TCP transport will have the effect of blocking the transmission of the 101-th message if the receiver is slow. This is very unlikely when using TCP transport since OS TCP buffers will typically provide enough buffering to allow you sending much more than 100 messages.
Of course if the receiver is slow, transmitting on a TCP ZMQ socket will eventually trigger the "mute state" of the socket; simply don't rely on the exact HWM value.
Assigning a local address to a socket.
// TCP port 5555 on all available interfaces rc = zmq_bind(socket, "tcp://*:5555"); assert (rc == 0); // TCP port 5555 on the local loop-back interface on all platforms rc = zmq_bind(socket, "tcp://127.0.0.1:5555"); assert (rc == 0); // TCP port 5555 on the first Ethernet network interface on Linux rc = zmq_bind(socket, "tcp://eth0:5555"); assert (rc == 0);
Connecting a socket.
// Connecting using an IP address rc = zmq_connect(socket, "tcp://192.168.1.1:5555"); assert (rc == 0); // Connecting using a DNS name rc = zmq_connect(socket, "tcp://server1:5555"); assert (rc == 0); // Connecting using a DNS name and bind to eth1 rc = zmq_connect(socket, "tcp://eth1:0;server1:5555"); assert (rc == 0); // Connecting using a IP address and bind to an IP address rc = zmq_connect(socket, "tcp://192.168.1.17:5555;192.168.1.1:5555"); assert (rc == 0);
This page was written by the 0MQ community. To make a change please read the 0MQ Contribution Policy at m[blue]http://www.zeromq.org/docs:contributingm.