~ubuntu-branches/ubuntu/saucy/zeromq3/saucy

« back to all changes in this revision

Viewing changes to doc/zmq_tcp.txt

  • Committer: Package Import Robot
  • Author(s): Alessandro Ghedini
  • Date: 2012-06-04 21:21:09 UTC
  • Revision ID: package-import@ubuntu.com-20120604212109-b7b3m0rn21o8oo2q
Tags: upstream-3.1.0~beta+dfsg
ImportĀ upstreamĀ versionĀ 3.1.0~beta+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
zmq_tcp(7)
 
2
==========
 
3
 
 
4
 
 
5
NAME
 
6
----
 
7
zmq_tcp - 0MQ unicast transport using TCP
 
8
 
 
9
 
 
10
SYNOPSIS
 
11
--------
 
12
TCP is an ubiquitous, reliable, unicast transport. When connecting distributed
 
13
applications over a network with 0MQ, using the TCP transport will likely be
 
14
your first choice.
 
15
 
 
16
 
 
17
ADDRESSING
 
18
----------
 
19
A 0MQ address string consists of two parts as follows:
 
20
'transport'`://`'endpoint'. The 'transport' part specifies the underlying
 
21
transport protocol to use, and for the TCP transport shall be set to `tcp`.
 
22
The meaning of the 'endpoint' part for the TCP transport is defined below.
 
23
 
 
24
 
 
25
Assigning a local address to a socket
 
26
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
27
When assigning a local address to a socket using _zmq_bind()_ with the 'tcp'
 
28
transport, the 'endpoint' shall be interpreted as an 'interface' followed by a
 
29
colon and the TCP port number to use.
 
30
 
 
31
An 'interface' may be specified by either of the following:
 
32
 
 
33
* The wild-card `*`, meaning all available interfaces.
 
34
* The primary IPv4 or IPv6 address assigned to the interface, in its numeric
 
35
  representation.
 
36
* The interface name as defined by the operating system.
 
37
 
 
38
NOTE: Interface names are not standardised in any way and should be assumed to
 
39
be arbitrary and platform dependent. On Win32 platforms no short interface
 
40
names exist, thus only the primary IP address may be used to specify an
 
41
'interface'.
 
42
 
 
43
Connecting a socket
 
44
~~~~~~~~~~~~~~~~~~~
 
45
When connecting a socket to a peer address using _zmq_connect()_ with the 'tcp'
 
46
transport, the 'endpoint' shall be interpreted as a 'peer address' followed by
 
47
a colon and the TCP port number to use.
 
48
 
 
49
A 'peer address' may be specified by either of the following:
 
50
 
 
51
* The DNS name of the peer.
 
52
* The IPv4 or IPv6 address of the peer, in it's numeric representation.
 
53
 
 
54
 
 
55
WIRE FORMAT
 
56
-----------
 
57
0MQ messages are transmitted over TCP in frames consisting of an encoded
 
58
'payload length', followed by a 'flags' field and the message body. The 'payload
 
59
length' is defined as the combined length in octets of the message body and the
 
60
'flags' field.
 
61
 
 
62
For frames with a 'payload length' not exceeding 254 octets, the 'payload
 
63
length' shall be encoded as a single octet.  The minimum valid 'payload length'
 
64
of a frame is 1 octet, thus a 'payload length' of 0 octets is invalid and such
 
65
frames SHOULD be ignored.
 
66
 
 
67
For frames with a 'payload length' exceeding 254 octets, the 'payload length'
 
68
shall be encoded as a single octet with the value `255` followed by the
 
69
'payload length' represented as a 64-bit unsigned integer in network byte
 
70
order.
 
71
 
 
72
The 'flags' field consists of a single octet containing various control flags:
 
73
 
 
74
Bit 0 (MORE): _More message parts to follow_. A value of 0 indicates that there
 
75
are no more message parts to follow; or that the message being sent is not a
 
76
multi-part message. A value of 1 indicates that the message being sent is a
 
77
multi-part message and more message parts are to follow.
 
78
 
 
79
Bits 1-7: _Reserved_. Bits 1-7 are reserved for future expansion and MUST be
 
80
set to zero.
 
81
 
 
82
The following ABNF grammar represents a single 'frame':
 
83
 
 
84
....
 
85
    frame           = (length flags data)
 
86
    length          = OCTET / (escape 8OCTET)
 
87
    flags           = OCTET
 
88
    escape          = %xFF
 
89
    data            = *OCTET
 
90
....
 
91
 
 
92
The following diagram illustrates the layout of a frame with a 'payload length'
 
93
not exceeding 254 octets:
 
94
 
 
95
....
 
96
0                   1                   2                   3
 
97
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
 
98
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
99
| Payload length|     Flags     |       Message body        ... |
 
100
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
101
| Message body ...
 
102
+-+-+-+-+-+-+- ...
 
103
....
 
104
 
 
105
The following diagram illustrates the layout of a frame with a 'payload length'
 
106
exceeding 254 octets:
 
107
 
 
108
....
 
109
0                   1                   2                   3
 
110
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
 
111
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
112
|     0xff      |               Payload length              ... |
 
113
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
114
|                       Payload length                      ... |
 
115
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
116
| Payload length|     Flags     |        Message body       ... |
 
117
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 
118
|  Message body ...
 
119
+-+-+-+-+-+-+-+ ...
 
120
....
 
121
 
 
122
 
 
123
EXAMPLES
 
124
--------
 
125
.Assigning a local address to a socket
 
126
----
 
127
/* TCP port 5555 on all available interfaces */
 
128
rc = zmq_bind(socket, "tcp://*:5555");
 
129
assert (rc == 0);
 
130
/* TCP port 5555 on the local loop-back interface on all platforms */
 
131
rc = zmq_bind(socket, "tcp://127.0.0.1:5555");
 
132
assert (rc == 0);
 
133
/* TCP port 5555 on the first Ethernet network interface on Linux */
 
134
rc = zmq_bind(socket, "tcp://eth0:5555");
 
135
assert (rc == 0);
 
136
----
 
137
 
 
138
.Connecting a socket
 
139
----
 
140
/* Connecting using an IP address */
 
141
rc = zmq_connect(socket, "tcp://192.168.1.1:5555");
 
142
assert (rc == 0);
 
143
/* Connecting using a DNS name */
 
144
rc = zmq_connect(socket, "tcp://server1:5555");
 
145
assert (rc == 0);
 
146
----
 
147
 
 
148
 
 
149
SEE ALSO
 
150
--------
 
151
linkzmq:zmq_bind[3]
 
152
linkzmq:zmq_connect[3]
 
153
linkzmq:zmq_pgm[7]
 
154
linkzmq:zmq_ipc[7]
 
155
linkzmq:zmq_inproc[7]
 
156
linkzmq:zmq[7]
 
157
 
 
158
 
 
159
AUTHORS
 
160
-------
 
161
The 0MQ documentation was written by Martin Sustrik <sustrik@250bpm.com> and
 
162
Martin Lucina <martin@lucina.net>.