0
0
mirror of https://github.com/zeromq/libzmq.git synced 2024-12-29 00:32:34 +08:00
libzmq/doc/zmq_tcp.txt

145 lines
4.5 KiB
Plaintext
Raw Normal View History

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-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>.