2023-10-21 01:50:38 +02:00
|
|
|
= zmq_tcp(7)
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-02-10 16:18:46 +01:00
|
|
|
|
2023-10-21 01:50:38 +02:00
|
|
|
== NAME
|
2010-03-09 18:47:31 +01:00
|
|
|
zmq_tcp - 0MQ unicast transport using TCP
|
2010-02-10 16:18:46 +01:00
|
|
|
|
|
|
|
|
2023-10-21 01:50:38 +02:00
|
|
|
== SYNOPSIS
|
2010-03-09 18:47:31 +01:00
|
|
|
TCP is an ubiquitous, reliable, unicast transport. When connecting distributed
|
|
|
|
applications over a network with 0MQ, using the TCP transport will likely be
|
|
|
|
your first choice.
|
2010-01-12 13:08:37 +01:00
|
|
|
|
|
|
|
|
2023-10-21 01:50:38 +02:00
|
|
|
== ADDRESSING
|
2012-10-27 02:43:19 +02:00
|
|
|
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.
|
|
|
|
|
|
|
|
For the TCP transport, the transport is `tcp`, and the meaning of the
|
|
|
|
'address' part is defined below.
|
2010-01-12 13:08:37 +01:00
|
|
|
|
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
Assigning a local address to a socket
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
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.
|
2010-01-14 14:11:34 +01:00
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
An 'interface' may be specified by either of the following:
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-12-01 10:57:37 +01:00
|
|
|
* The wild-card `*`, meaning all available interfaces.
|
2011-08-08 12:10:31 +02:00
|
|
|
* The primary IPv4 or IPv6 address assigned to the interface, in its numeric
|
2010-08-04 16:05:25 +02:00
|
|
|
representation.
|
2012-10-27 02:43:19 +02:00
|
|
|
* The non-portable interface name as defined by the operating system.
|
|
|
|
|
|
|
|
The TCP port number may be specified by:
|
|
|
|
|
|
|
|
* A numeric value, usually above 1024 on POSIX systems.
|
|
|
|
* The wild-card `*`, meaning a system-assigned ephemeral port.
|
|
|
|
|
|
|
|
When using ephemeral ports, the caller should retrieve the actual assigned
|
2023-10-21 01:50:38 +02:00
|
|
|
port using the ZMQ_LAST_ENDPOINT socket option. See xref:zmq_getsockopt.adoc[zmq_getsockopt]
|
2012-10-27 02:43:19 +02:00
|
|
|
for details.
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2014-11-05 15:16:56 +01:00
|
|
|
Unbinding wild-card address from a socket
|
2014-10-27 14:16:36 +01:00
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
When wild-card `*` 'endpoint' was used in _zmq_bind()_, the caller should use
|
2014-11-05 15:24:22 +01:00
|
|
|
real 'endpoint' obtained from the ZMQ_LAST_ENDPOINT socket option to unbind
|
2014-10-27 14:16:36 +01:00
|
|
|
this 'endpoint' from a socket using _zmq_unbind()_.
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
Connecting a socket
|
|
|
|
~~~~~~~~~~~~~~~~~~~
|
|
|
|
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.
|
2014-04-30 14:43:37 +02:00
|
|
|
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.
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
A 'peer address' may be specified by either of the following:
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
* The DNS name of the peer.
|
2012-10-27 02:43:19 +02:00
|
|
|
* The IPv4 or IPv6 address of the peer, in its numeric representation.
|
2010-03-09 18:47:31 +01:00
|
|
|
|
2012-11-20 20:10:47 +01:00
|
|
|
Note: A description of the ZeroMQ Message Transport Protocol (ZMTP) which is
|
2022-03-03 08:20:39 +01:00
|
|
|
used by the TCP transport can be found at <http://rfc.zeromq.org/spec:23>
|
2010-03-09 18:47:31 +01:00
|
|
|
|
2018-09-13 23:14:06 +02:00
|
|
|
|
2023-10-21 01:50:38 +02:00
|
|
|
== HWM
|
2018-09-13 23:14:06 +02:00
|
|
|
|
|
|
|
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
|
2022-02-10 23:45:06 +01:00
|
|
|
be different. Moreover TCP buffers provided by the OS will accommodate a varying
|
2018-09-13 23:14:06 +02:00
|
|
|
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.
|
|
|
|
|
|
|
|
Obviously the same considerations apply for the receive HWM (see ZMQ_RCVHWM).
|
|
|
|
|
|
|
|
|
|
|
|
|
2023-10-21 01:50:38 +02:00
|
|
|
== EXAMPLES
|
2010-03-09 18:47:31 +01:00
|
|
|
.Assigning a local address to a socket
|
|
|
|
----
|
2012-10-27 02:43:19 +02:00
|
|
|
// TCP port 5555 on all available interfaces
|
2014-06-23 20:24:36 +02:00
|
|
|
rc = zmq_bind(socket, "tcp://*:5555");
|
2010-08-10 12:36:56 +02:00
|
|
|
assert (rc == 0);
|
2012-10-27 02:43:19 +02:00
|
|
|
// TCP port 5555 on the local loop-back interface on all platforms
|
2010-03-09 18:47:31 +01:00
|
|
|
rc = zmq_bind(socket, "tcp://127.0.0.1:5555");
|
|
|
|
assert (rc == 0);
|
2012-10-27 02:43:19 +02:00
|
|
|
// TCP port 5555 on the first Ethernet network interface on Linux
|
2010-03-09 18:47:31 +01:00
|
|
|
rc = zmq_bind(socket, "tcp://eth0:5555");
|
|
|
|
assert (rc == 0);
|
|
|
|
----
|
|
|
|
|
|
|
|
.Connecting a socket
|
|
|
|
----
|
2012-10-27 02:43:19 +02:00
|
|
|
// Connecting using an IP address
|
2010-03-09 18:47:31 +01:00
|
|
|
rc = zmq_connect(socket, "tcp://192.168.1.1:5555");
|
|
|
|
assert (rc == 0);
|
2012-10-27 02:43:19 +02:00
|
|
|
// Connecting using a DNS name
|
2010-03-09 18:47:31 +01:00
|
|
|
rc = zmq_connect(socket, "tcp://server1:5555");
|
|
|
|
assert (rc == 0);
|
2014-04-30 14:43:37 +02:00
|
|
|
// 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);
|
2010-02-10 16:18:46 +01:00
|
|
|
----
|
|
|
|
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2023-10-21 01:50:38 +02:00
|
|
|
== SEE ALSO
|
2023-11-03 11:36:47 +01:00
|
|
|
* xref:zmq_bind.adoc[zmq_bind]
|
|
|
|
* xref:zmq_connect.adoc[zmq_connect]
|
|
|
|
* xref:zmq_pgm.adoc[zmq_pgm]
|
|
|
|
* xref:zmq_ipc.adoc[zmq_ipc]
|
|
|
|
* xref:zmq_inproc.adoc[zmq_inproc]
|
|
|
|
* xref:zmq_vmci.adoc[zmq_vmci]
|
|
|
|
* xref:zmq.adoc[zmq]
|
2010-01-13 15:15:01 +01:00
|
|
|
|
|
|
|
|
2023-10-21 01:50:38 +02:00
|
|
|
== AUTHORS
|
2013-04-11 18:53:02 +02:00
|
|
|
This page was written by the 0MQ community. To make a change please
|
2023-11-22 23:18:23 +01:00
|
|
|
read the 0MQ Contribution Policy at <https://zeromq.org/how-to-contribute/>.
|