2010-02-10 16:18:46 +01:00
|
|
|
zmq_tcp(7)
|
|
|
|
==========
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-02-10 16:18:46 +01: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
|
|
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
ADDRESSING
|
|
|
|
----------
|
|
|
|
A 0MQ address string consists of two parts as follows:
|
|
|
|
'transport'`://`'endpoint'. The 'transport' part specifies the underlying
|
|
|
|
transport protocol to use, and for the TCP transport shall be set to `tcp`.
|
|
|
|
The meaning of the 'endpoint' part for the TCP transport 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-03-09 18:47:31 +01:00
|
|
|
* The interface name as defined by the operating system.
|
|
|
|
* The primary IPv4 address assigned to the interface, in it's numeric representation.
|
|
|
|
* The wildcard `*`, meaning that the interface address is unspecified.
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
NOTE: Interface names are not standardised in any way and should be assumed to
|
|
|
|
be arbitrary and platform dependent. On Win32 platforms no short interface
|
|
|
|
names exist, thus only the primary IPv4 address may be used to specify an
|
|
|
|
'interface'.
|
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.
|
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.
|
|
|
|
* The IPv4 address of the peer, in it's numeric representation.
|
2010-01-12 13:08:37 +01:00
|
|
|
|
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
WIRE FORMAT
|
|
|
|
-----------
|
|
|
|
0MQ messages are transmitted over TCP in frames consisting of the message
|
2010-03-10 12:40:13 +01:00
|
|
|
length followed by flags byte and the message data. The length MUST correspond
|
|
|
|
to the length of the remaining part of the frame.
|
|
|
|
|
|
|
|
. A single 'frame' can be defined by the
|
2010-03-09 18:47:31 +01:00
|
|
|
following ABNF grammar:
|
|
|
|
|
|
|
|
....
|
2010-03-10 12:40:13 +01:00
|
|
|
frame = (length flags data)
|
|
|
|
length = OCTET / (escape 8OCTET)
|
|
|
|
flags = OCTET
|
2010-03-09 18:47:31 +01:00
|
|
|
escape = %xFF
|
2010-03-10 12:40:13 +01:00
|
|
|
data = *OCTET
|
2010-03-09 18:47:31 +01:00
|
|
|
....
|
|
|
|
|
|
|
|
|
2010-03-10 12:40:13 +01:00
|
|
|
For messages of 0 to 253 octets in length, the message length is represented by
|
2010-03-09 18:47:31 +01:00
|
|
|
a single octet:
|
|
|
|
|
|
|
|
....
|
2010-01-12 13:08:37 +01:00
|
|
|
0 1 2 3
|
|
|
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
2010-03-10 12:40:13 +01:00
|
|
|
| Message size | Flags | Message body ... |
|
2010-01-12 13:08:37 +01:00
|
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
| Message body ...
|
|
|
|
+-+-+-+-+-+-+- ...
|
2010-03-09 18:47:31 +01:00
|
|
|
....
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-03-10 12:40:13 +01:00
|
|
|
For messages of 254 or more octets in length, the message length is represented
|
2010-03-09 18:47:31 +01:00
|
|
|
by a single octet with the value `255` followed by the message length
|
|
|
|
represented as a 64-bit unsigned integer in network byte order:
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
....
|
2010-01-12 13:08:37 +01:00
|
|
|
0 1 2 3
|
|
|
|
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
|
|
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
| 0xff | Message size ... |
|
|
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
| Message size ... |
|
|
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
2010-03-10 12:40:13 +01:00
|
|
|
| Message size | Flags | Message body ... |
|
2010-01-12 13:08:37 +01:00
|
|
|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|
|
|
|
| Message body ...
|
|
|
|
+-+-+-+-+-+-+-+ ...
|
2010-03-09 18:47:31 +01:00
|
|
|
....
|
|
|
|
|
2010-03-10 12:40:13 +01:00
|
|
|
The flags field is reserved and MUST be set to 0.
|
2010-03-09 18:47:31 +01:00
|
|
|
|
|
|
|
EXAMPLES
|
|
|
|
--------
|
|
|
|
.Assigning a local address to a socket
|
|
|
|
----
|
|
|
|
/* TCP port 5555 on the local loopback 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);
|
|
|
|
/* TCP port 5555 with an unspecified interface */
|
|
|
|
rc = zmq_bind(socket, "tcp://*: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);
|
2010-02-10 16:18:46 +01:00
|
|
|
----
|
|
|
|
|
2010-01-12 13:08:37 +01:00
|
|
|
|
2010-02-10 16:18:46 +01:00
|
|
|
SEE ALSO
|
|
|
|
--------
|
2010-03-09 18:47:31 +01:00
|
|
|
linkzmq:zmq_bind[3]
|
|
|
|
linkzmq:zmq_connect[3]
|
2010-02-10 16:18:46 +01:00
|
|
|
linkzmq:zmq_pgm[7]
|
|
|
|
linkzmq:zmq_ipc[7]
|
|
|
|
linkzmq:zmq_inproc[7]
|
2010-03-09 18:47:31 +01:00
|
|
|
linkzmq:zmq[7]
|
2010-01-13 15:15:01 +01:00
|
|
|
|
|
|
|
|
2010-03-09 18:47:31 +01:00
|
|
|
AUTHORS
|
|
|
|
-------
|
|
|
|
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and
|
|
|
|
Martin Lucina <mato@kotelna.sk>.
|