man: replace dash with mdash where appropriate
[platform/upstream/systemd.git] / man / systemd.socket.xml
1 <?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
2 <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3   "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4
5 <!--
6   This file is part of systemd.
7
8   Copyright 2010 Lennart Poettering
9
10   systemd is free software; you can redistribute it and/or modify it
11   under the terms of the GNU Lesser General Public License as published by
12   the Free Software Foundation; either version 2.1 of the License, or
13   (at your option) any later version.
14
15   systemd is distributed in the hope that it will be useful, but
16   WITHOUT ANY WARRANTY; without even the implied warranty of
17   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18   Lesser General Public License for more details.
19
20   You should have received a copy of the GNU Lesser General Public License
21   along with systemd; If not, see <http://www.gnu.org/licenses/>.
22 -->
23
24 <refentry id="systemd.socket">
25   <refentryinfo>
26     <title>systemd.socket</title>
27     <productname>systemd</productname>
28
29     <authorgroup>
30       <author>
31         <contrib>Developer</contrib>
32         <firstname>Lennart</firstname>
33         <surname>Poettering</surname>
34         <email>lennart@poettering.net</email>
35       </author>
36     </authorgroup>
37   </refentryinfo>
38
39   <refmeta>
40     <refentrytitle>systemd.socket</refentrytitle>
41     <manvolnum>5</manvolnum>
42   </refmeta>
43
44   <refnamediv>
45     <refname>systemd.socket</refname>
46     <refpurpose>Socket unit configuration</refpurpose>
47   </refnamediv>
48
49   <refsynopsisdiv>
50     <para><filename><replaceable>socket</replaceable>.socket</filename></para>
51   </refsynopsisdiv>
52
53   <refsect1>
54     <title>Description</title>
55
56     <para>A unit configuration file whose name ends in
57     <literal>.socket</literal> encodes information about an IPC or
58     network socket or a file system FIFO controlled and supervised by
59     systemd, for socket-based activation.</para>
60
61     <para>This man page lists the configuration options specific to
62     this unit type. See
63     <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>
64     for the common options of all unit configuration files. The common
65     configuration items are configured in the generic [Unit] and
66     [Install] sections. The socket specific configuration options are
67     configured in the [Socket] section.</para>
68
69     <para>Additional options are listed in
70     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
71     which define the execution environment the
72     <option>ExecStartPre=</option>, <option>ExecStartPost=</option>,
73     <option>ExecStopPre=</option> and <option>ExecStopPost=</option>
74     commands are executed in, and in
75     <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
76     which define the way the processes are terminated, and in
77     <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
78     which configure resource control settings for the processes of the
79     socket.</para>
80
81     <para>For each socket file, a matching service file must exist,
82     describing the service to start on incoming traffic on the socket
83     (see
84     <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>
85     for more information about .service files). The name of the
86     .service unit is by default the same as the name of the .socket
87     unit, but can be altered with the <option>Service=</option> option
88     described below. Depending on the setting of the
89     <option>Accept=</option> option described below, this .service
90     unit must either be named like the .socket unit, but with the
91     suffix replaced, unless overridden with <option>Service=</option>;
92     or it must be a template unit named the same way. Example: a
93     socket file <filename>foo.socket</filename> needs a matching
94     service <filename>foo.service</filename> if
95     <option>Accept=false</option> is set. If
96     <option>Accept=true</option> is set, a service template file
97     <filename>foo@.service</filename> must exist from which services
98     are instantiated for each incoming connection.</para>
99
100     <para>Unless <varname>DefaultDependencies=</varname> in the <literal>[Unit]</literal> section is set to
101     <option>false</option>, socket units will implicitly have dependencies of type <varname>Requires=</varname> and
102     <varname>After=</varname> on <filename>sysinit.target</filename> as well as dependencies of type
103     <varname>Conflicts=</varname> and <varname>Before=</varname> on <filename>shutdown.target</filename>. These ensure
104     that socket units pull in basic system initialization, and are terminated cleanly prior to system shutdown. Only
105     sockets involved with early boot or late system shutdown should disable this option.</para>
106
107     <para>Socket units will have a <varname>Before=</varname>
108     dependency on the service which they trigger added implicitly. No
109     implicit <varname>WantedBy=</varname> or
110     <varname>RequiredBy=</varname> dependency from the socket to the
111     service is added. This means that the service may be started
112     without the socket, in which case it must be able to open sockets
113     by itself. To prevent this, an explicit
114     <varname>Requires=</varname> dependency may be added.</para>
115
116     <para>Socket units may be used to implement on-demand starting of
117     services, as well as parallelized starting of services. See the
118     blog stories linked at the end for an introduction.</para>
119
120     <para>Note that the daemon software configured for socket
121     activation with socket units needs to be able to accept sockets
122     from systemd, either via systemd's native socket passing interface
123     (see
124     <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>
125     for details) or via the traditional
126     <citerefentry project='freebsd'><refentrytitle>inetd</refentrytitle><manvolnum>8</manvolnum></citerefentry>-style
127     socket passing (i.e. sockets passed in via standard input and
128     output, using <varname>StandardInput=socket</varname> in the
129     service file).</para>
130   </refsect1>
131
132   <refsect1>
133     <title>Automatic Dependencies</title>
134
135     <para>Socket units automatically gain a <varname>Before=</varname>
136     dependency on the service units they activate.</para>
137
138     <para>Socket units referring to file system paths (such as AF_UNIX
139     sockets or FIFOs) implicitly gain <varname>Requires=</varname> and
140     <varname>After=</varname> dependencies on all mount units
141     necessary to access those paths.</para>
142
143     <para>Socket units using the <varname>BindToDevice=</varname>
144     setting automatically gain a <varname>BindsTo=</varname> and
145     <varname>After=</varname> dependency on the device unit
146     encapsulating the specified network interface.</para>
147
148     <para>If <varname>DefaultDependencies=yes</varname> is set (the
149     default), socket units automatically gain a
150     <varname>Before=</varname> dependency on
151     <filename>sockets.target</filename>. They also gain a pair of
152     <varname>After=</varname> and <varname>Requires=</varname>
153     dependency on <filename>sysinit.target</filename>, and a pair of
154     <varname>Before=</varname> and <varname>Conflicts=</varname>
155     dependencies on <filename>shutdown.target</filename>. These
156     dependencies ensure that the socket unit is started before normal
157     services at boot, and is stopped on shutdown.</para>
158
159     <para>Additional implicit dependencies may be added as result of
160     execution and resource control parameters as documented in
161     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
162     and
163     <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>.</para>
164   </refsect1>
165
166   <refsect1>
167     <title>Options</title>
168
169     <para>Socket files must include a [Socket] section, which carries
170     information about the socket or FIFO it supervises. A number of
171     options that may be used in this section are shared with other
172     unit types. These options are documented in
173     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
174     and
175     <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.
176     The options specific to the [Socket] section of socket units are
177     the following:</para>
178
179     <variablelist class='unit-directives'>
180       <varlistentry>
181         <term><varname>ListenStream=</varname></term>
182         <term><varname>ListenDatagram=</varname></term>
183         <term><varname>ListenSequentialPacket=</varname></term>
184         <listitem><para>Specifies an address to listen on for a stream
185         (<constant>SOCK_STREAM</constant>), datagram
186         (<constant>SOCK_DGRAM</constant>), or sequential packet
187         (<constant>SOCK_SEQPACKET</constant>) socket, respectively.
188         The address can be written in various formats:</para>
189
190         <para>If the address starts with a slash
191         (<literal>/</literal>), it is read as file system socket in
192         the <constant>AF_UNIX</constant> socket family.</para>
193
194         <para>If the address starts with an at symbol
195         (<literal>@</literal>), it is read as abstract namespace
196         socket in the <constant>AF_UNIX</constant> family. The
197         <literal>@</literal> is replaced with a
198         <constant>NUL</constant> character before binding. For
199         details, see
200         <citerefentry project='man-pages'><refentrytitle>unix</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
201
202         <para>If the address string is a single number, it is read as
203         port number to listen on via IPv6. Depending on the value of
204         <varname>BindIPv6Only=</varname> (see below) this might result
205         in the service being available via both IPv6 and IPv4
206         (default) or just via IPv6.
207         </para>
208
209         <para>If the address string is a string in the format
210         v.w.x.y:z, it is read as IPv4 specifier for listening on an
211         address v.w.x.y on a port z.</para>
212
213         <para>If the address string is a string in the format [x]:y,
214         it is read as IPv6 address x on a port y. Note that this might
215         make the service available via IPv4, too, depending on the
216         <varname>BindIPv6Only=</varname> setting (see below).
217         </para>
218
219         <para>Note that <constant>SOCK_SEQPACKET</constant> (i.e.
220         <varname>ListenSequentialPacket=</varname>) is only available
221         for <constant>AF_UNIX</constant> sockets.
222         <constant>SOCK_STREAM</constant> (i.e.
223         <varname>ListenStream=</varname>) when used for IP sockets
224         refers to TCP sockets, <constant>SOCK_DGRAM</constant> (i.e.
225         <varname>ListenDatagram=</varname>) to UDP.</para>
226
227         <para>These options may be specified more than once, in which
228         case incoming traffic on any of the sockets will trigger
229         service activation, and all listed sockets will be passed to
230         the service, regardless of whether there is incoming traffic
231         on them or not. If the empty string is assigned to any of
232         these options, the list of addresses to listen on is reset,
233         all prior uses of any of these options will have no
234         effect.</para>
235
236         <para>It is also possible to have more than one socket unit
237         for the same service when using <varname>Service=</varname>,
238         and the service will receive all the sockets configured in all
239         the socket units. Sockets configured in one unit are passed in
240         the order of configuration, but no ordering between socket
241         units is specified.</para>
242
243         <para>If an IP address is used here, it is often desirable to
244         listen on it before the interface it is configured on is up
245         and running, and even regardless of whether it will be up and
246         running at any point. To deal with this, it is recommended to
247         set the <varname>FreeBind=</varname> option described
248         below.</para></listitem>
249       </varlistentry>
250
251       <varlistentry>
252         <term><varname>ListenFIFO=</varname></term>
253         <listitem><para>Specifies a file system FIFO to listen on.
254         This expects an absolute file system path as argument.
255         Behavior otherwise is very similar to the
256         <varname>ListenDatagram=</varname> directive
257         above.</para></listitem>
258       </varlistentry>
259
260       <varlistentry>
261         <term><varname>ListenSpecial=</varname></term>
262         <listitem><para>Specifies a special file in the file system to
263         listen on. This expects an absolute file system path as
264         argument. Behavior otherwise is very similar to the
265         <varname>ListenFIFO=</varname> directive above. Use this to
266         open character device nodes as well as special files in
267         <filename>/proc</filename> and
268         <filename>/sys</filename>.</para></listitem>
269       </varlistentry>
270
271       <varlistentry>
272         <term><varname>ListenNetlink=</varname></term>
273         <listitem><para>Specifies a Netlink family to create a socket
274         for to listen on. This expects a short string referring to the
275         <constant>AF_NETLINK</constant> family name (such as
276         <varname>audit</varname> or <varname>kobject-uevent</varname>)
277         as argument, optionally suffixed by a whitespace followed by a
278         multicast group integer. Behavior otherwise is very similar to
279         the <varname>ListenDatagram=</varname> directive
280         above.</para></listitem>
281       </varlistentry>
282
283       <varlistentry>
284         <term><varname>ListenMessageQueue=</varname></term>
285         <listitem><para>Specifies a POSIX message queue name to listen
286         on. This expects a valid message queue name (i.e. beginning
287         with /). Behavior otherwise is very similar to the
288         <varname>ListenFIFO=</varname> directive above. On Linux
289         message queue descriptors are actually file descriptors and
290         can be inherited between processes.</para></listitem>
291       </varlistentry>
292
293       <varlistentry>
294         <term><varname>ListenUSBFunction=</varname></term>
295         <listitem><para>Specifies a <ulink
296         url="https://www.kernel.org/doc/Documentation/usb/functionfs.txt">USB
297         FunctionFS</ulink> endpoint location to listen on, for
298         implementation of USB gadget functions. This expects an
299         absolute file system path as the argument. Behavior otherwise
300         is very similar to the <varname>ListenFIFO=</varname>
301         directive above. Use this to open the FunctionFS endpoint
302         <filename>ep0</filename>. When using this option, the
303         activated service has to have the
304         <varname>USBFunctionDescriptors=</varname> and
305         <varname>USBFunctionStrings=</varname> options set.
306         </para></listitem>
307       </varlistentry>
308
309       <varlistentry>
310         <term><varname>SocketProtocol=</varname></term>
311         <listitem><para>Takes a one of <option>udplite</option>
312         or <option>sctp</option>. Specifies a socket protocol
313         (<constant>IPPROTO_UDPLITE</constant>) UDP-Lite
314         (<constant>IPPROTO_SCTP</constant>) SCTP socket respectively. </para>
315         </listitem>
316       </varlistentry>
317
318       <varlistentry>
319         <term><varname>BindIPv6Only=</varname></term>
320         <listitem><para>Takes a one of <option>default</option>,
321         <option>both</option> or <option>ipv6-only</option>. Controls
322         the IPV6_V6ONLY socket option (see
323         <citerefentry project='die-net'><refentrytitle>ipv6</refentrytitle><manvolnum>7</manvolnum></citerefentry>
324         for details). If <option>both</option>, IPv6 sockets bound
325         will be accessible via both IPv4 and IPv6. If
326         <option>ipv6-only</option>, they will be accessible via IPv6
327         only. If <option>default</option> (which is the default,
328         surprise!), the system wide default setting is used, as
329         controlled by
330         <filename>/proc/sys/net/ipv6/bindv6only</filename>, which in
331         turn defaults to the equivalent of
332         <option>both</option>.</para>
333         </listitem>
334       </varlistentry>
335
336       <varlistentry>
337         <term><varname>Backlog=</varname></term>
338         <listitem><para>Takes an unsigned integer argument. Specifies
339         the number of connections to queue that have not been accepted
340         yet. This setting matters only for stream and sequential
341         packet sockets. See
342         <citerefentry><refentrytitle>listen</refentrytitle><manvolnum>2</manvolnum></citerefentry>
343         for details. Defaults to SOMAXCONN (128).</para></listitem>
344       </varlistentry>
345
346       <varlistentry>
347         <term><varname>BindToDevice=</varname></term>
348         <listitem><para>Specifies a network interface name to bind
349         this socket to. If set, traffic will only be accepted from the
350         specified network interfaces. This controls the
351         SO_BINDTODEVICE socket option (see <citerefentry
352         project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
353         for details). If this option is used, an automatic dependency
354         from this socket unit on the network interface device unit
355         (<citerefentry><refentrytitle>systemd.device</refentrytitle><manvolnum>5</manvolnum></citerefentry>
356         is created. Note that setting this parameter might result in
357         additional dependencies to be added to the unit (see
358         above).</para></listitem>
359       </varlistentry>
360
361       <varlistentry>
362         <term><varname>SocketUser=</varname></term>
363         <term><varname>SocketGroup=</varname></term>
364
365         <listitem><para>Takes a UNIX user/group name. When specified,
366         all AF_UNIX sockets and FIFO nodes in the file system are
367         owned by the specified user and group. If unset (the default),
368         the nodes are owned by the root user/group (if run in system
369         context) or the invoking user/group (if run in user context).
370         If only a user is specified but no group, then the group is
371         derived from the user's default group.</para></listitem>
372       </varlistentry>
373
374       <varlistentry>
375         <term><varname>SocketMode=</varname></term>
376         <listitem><para>If listening on a file system socket or FIFO,
377         this option specifies the file system access mode used when
378         creating the file node. Takes an access mode in octal
379         notation. Defaults to 0666.</para></listitem>
380       </varlistentry>
381
382       <varlistentry>
383         <term><varname>DirectoryMode=</varname></term>
384         <listitem><para>If listening on a file system socket or FIFO,
385         the parent directories are automatically created if needed.
386         This option specifies the file system access mode used when
387         creating these directories. Takes an access mode in octal
388         notation. Defaults to 0755.</para></listitem>
389       </varlistentry>
390
391       <varlistentry>
392         <term><varname>Accept=</varname></term>
393         <listitem><para>Takes a boolean argument. If true, a service
394         instance is spawned for each incoming connection and only the
395         connection socket is passed to it. If false, all listening
396         sockets themselves are passed to the started service unit, and
397         only one service unit is spawned for all connections (also see
398         above). This value is ignored for datagram sockets and FIFOs
399         where a single service unit unconditionally handles all
400         incoming traffic. Defaults to <option>false</option>. For
401         performance reasons, it is recommended to write new daemons
402         only in a way that is suitable for
403         <option>Accept=false</option>. A daemon listening on an
404         <constant>AF_UNIX</constant> socket may, but does not need to,
405         call
406         <citerefentry><refentrytitle>close</refentrytitle><manvolnum>2</manvolnum></citerefentry>
407         on the received socket before exiting. However, it must not
408         unlink the socket from a file system. It should not invoke
409         <citerefentry><refentrytitle>shutdown</refentrytitle><manvolnum>2</manvolnum></citerefentry>
410         on sockets it got with <varname>Accept=false</varname>, but it
411         may do so for sockets it got with
412         <varname>Accept=true</varname> set. Setting
413         <varname>Accept=true</varname> is mostly useful to allow
414         daemons designed for usage with
415         <citerefentry project='freebsd'><refentrytitle>inetd</refentrytitle><manvolnum>8</manvolnum></citerefentry>
416         to work unmodified with systemd socket
417         activation.</para>
418
419         <para>For IPv4 and IPv6 connections, the <varname>REMOTE_ADDR</varname>
420         environment variable will contain the remote IP address, and <varname>REMOTE_PORT</varname>
421         will contain the remote port. This is the same as the format used by CGI.
422         For SOCK_RAW, the port is the IP protocol.</para></listitem>
423       </varlistentry>
424
425       <varlistentry>
426         <term><varname>Writable=</varname></term>
427         <listitem><para>Takes a boolean argument. May only be used in
428         conjunction with <varname>ListenSpecial=</varname>. If true,
429         the specified special file is opened in read-write mode, if
430         false, in read-only mode. Defaults to false.</para></listitem>
431       </varlistentry>
432
433       <varlistentry>
434         <term><varname>MaxConnections=</varname></term>
435         <listitem><para>The maximum number of connections to
436         simultaneously run services instances for, when
437         <option>Accept=true</option> is set. If more concurrent
438         connections are coming in, they will be refused until at least
439         one existing connection is terminated. This setting has no
440         effect on sockets configured with
441         <option>Accept=false</option> or datagram sockets. Defaults to
442         64.</para></listitem>
443       </varlistentry>
444
445       <varlistentry>
446         <term><varname>KeepAlive=</varname></term>
447         <listitem><para>Takes a boolean argument. If true, the TCP/IP
448         stack will send a keep alive message after 2h (depending on
449         the configuration of
450         <filename>/proc/sys/net/ipv4/tcp_keepalive_time</filename>)
451         for all TCP streams accepted on this socket. This controls the
452         SO_KEEPALIVE socket option (see
453         <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
454         and the <ulink
455         url="http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/">TCP
456         Keepalive HOWTO</ulink> for details.) Defaults to
457         <option>false</option>.</para></listitem>
458       </varlistentry>
459
460       <varlistentry>
461         <term><varname>KeepAliveTimeSec=</varname></term>
462         <listitem><para>Takes time (in seconds) as argument. The connection needs to remain
463         idle before TCP starts sending keepalive probes. This controls the TCP_KEEPIDLE
464         socket option (see
465         <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
466         and the <ulink
467         url="http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/">TCP
468         Keepalive HOWTO</ulink> for details.)
469         Defaults value is 7200 seconds (2 hours).</para></listitem>
470       </varlistentry>
471
472       <varlistentry>
473         <term><varname>KeepAliveIntervalSec=</varname></term>
474         <listitem><para>Takes time (in seconds) as argument between
475         individual keepalive probes, if the socket option SO_KEEPALIVE
476         has been set on this socket. This controls
477         the TCP_KEEPINTVL socket option (see
478         <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
479         and the <ulink
480         url="http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/">TCP
481         Keepalive HOWTO</ulink> for details.) Defaults value is 75
482         seconds.</para></listitem>
483       </varlistentry>
484
485       <varlistentry>
486         <term><varname>KeepAliveProbes=</varname></term>
487         <listitem><para>Takes an integer as argument. It is the number of
488         unacknowledged probes to send before considering the
489         connection dead and notifying the application layer. This
490         controls the TCP_KEEPCNT socket option (see
491         <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
492         and the <ulink
493         url="http://www.tldp.org/HOWTO/html_single/TCP-Keepalive-HOWTO/">TCP
494         Keepalive HOWTO</ulink> for details.) Defaults value is
495         9.</para></listitem>
496       </varlistentry>
497
498       <varlistentry>
499         <term><varname>NoDelay=</varname></term>
500         <listitem><para>Takes a boolean argument. TCP Nagle's
501         algorithm works by combining a number of small outgoing
502         messages, and sending them all at once. This controls the
503         TCP_NODELAY socket option (see
504         <citerefentry project='die-net'><refentrytitle>tcp</refentrytitle><manvolnum>7</manvolnum></citerefentry>
505         Defaults to <option>false</option>.</para></listitem>
506       </varlistentry>
507
508       <varlistentry>
509         <term><varname>Priority=</varname></term>
510         <listitem><para>Takes an integer argument controlling the
511         priority for all traffic sent from this socket. This controls
512         the SO_PRIORITY socket option (see
513         <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
514         for details.).</para></listitem>
515       </varlistentry>
516
517       <varlistentry>
518         <term><varname>DeferAcceptSec=</varname></term>
519
520         <listitem><para>Takes time (in seconds) as argument. If set,
521         the listening process will be awakened only when data arrives
522         on the socket, and not immediately when connection is
523         established. When this option is set, the
524         <constant>TCP_DEFER_ACCEPT</constant> socket option will be
525         used (see
526         <citerefentry project='die-net'><refentrytitle>tcp</refentrytitle><manvolnum>7</manvolnum></citerefentry>),
527         and the kernel will ignore initial ACK packets without any
528         data. The argument specifies the approximate amount of time
529         the kernel should wait for incoming data before falling back
530         to the normal behavior of honouring empty ACK packets. This
531         option is beneficial for protocols where the client sends the
532         data first (e.g. HTTP, in contrast to SMTP), because the
533         server process will not be woken up unnecessarily before it
534         can take any action.
535         </para>
536
537         <para>If the client also uses the
538         <constant>TCP_DEFER_ACCEPT</constant> option, the latency of
539         the initial connection may be reduced, because the kernel will
540         send data in the final packet establishing the connection (the
541         third packet in the "three-way handshake").</para>
542
543         <para>Disabled by default.</para>
544         </listitem>
545       </varlistentry>
546
547       <varlistentry>
548         <term><varname>ReceiveBuffer=</varname></term>
549         <term><varname>SendBuffer=</varname></term>
550         <listitem><para>Takes an integer argument controlling the
551         receive or send buffer sizes of this socket, respectively.
552         This controls the SO_RCVBUF and SO_SNDBUF socket options (see
553         <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
554         for details.). The usual suffixes K, M, G are supported and
555         are understood to the base of 1024.</para></listitem>
556       </varlistentry>
557
558       <varlistentry>
559         <term><varname>IPTOS=</varname></term>
560         <listitem><para>Takes an integer argument controlling the IP
561         Type-Of-Service field for packets generated from this socket.
562         This controls the IP_TOS socket option (see
563         <citerefentry project='die-net'><refentrytitle>ip</refentrytitle><manvolnum>7</manvolnum></citerefentry>
564         for details.). Either a numeric string or one of
565         <option>low-delay</option>, <option>throughput</option>,
566         <option>reliability</option> or <option>low-cost</option> may
567         be specified.</para></listitem>
568       </varlistentry>
569
570       <varlistentry>
571         <term><varname>IPTTL=</varname></term>
572         <listitem><para>Takes an integer argument controlling the IPv4
573         Time-To-Live/IPv6 Hop-Count field for packets generated from
574         this socket. This sets the IP_TTL/IPV6_UNICAST_HOPS socket
575         options (see
576         <citerefentry project='die-net'><refentrytitle>ip</refentrytitle><manvolnum>7</manvolnum></citerefentry>
577         and
578         <citerefentry project='die-net'><refentrytitle>ipv6</refentrytitle><manvolnum>7</manvolnum></citerefentry>
579         for details.)</para></listitem>
580       </varlistentry>
581
582       <varlistentry>
583         <term><varname>Mark=</varname></term>
584         <listitem><para>Takes an integer value. Controls the firewall
585         mark of packets generated by this socket. This can be used in
586         the firewall logic to filter packets from this socket. This
587         sets the SO_MARK socket option. See
588         <citerefentry project='die-net'><refentrytitle>iptables</refentrytitle><manvolnum>8</manvolnum></citerefentry>
589         for details.</para></listitem>
590       </varlistentry>
591
592       <varlistentry>
593         <term><varname>ReusePort=</varname></term>
594         <listitem><para>Takes a boolean value. If true, allows
595         multiple
596         <citerefentry><refentrytitle>bind</refentrytitle><manvolnum>2</manvolnum></citerefentry>s
597         to this TCP or UDP port. This controls the SO_REUSEPORT socket
598         option. See
599         <citerefentry project='man-pages'><refentrytitle>socket</refentrytitle><manvolnum>7</manvolnum></citerefentry>
600         for details.</para></listitem>
601       </varlistentry>
602
603       <varlistentry>
604         <term><varname>SmackLabel=</varname></term>
605         <term><varname>SmackLabelIPIn=</varname></term>
606         <term><varname>SmackLabelIPOut=</varname></term>
607         <listitem><para>Takes a string value. Controls the extended
608         attributes <literal>security.SMACK64</literal>,
609         <literal>security.SMACK64IPIN</literal> and
610         <literal>security.SMACK64IPOUT</literal>, respectively, i.e.
611         the security label of the FIFO, or the security label for the
612         incoming or outgoing connections of the socket, respectively.
613         See <ulink
614         url="https://www.kernel.org/doc/Documentation/security/Smack.txt">Smack.txt</ulink>
615         for details.</para></listitem>
616       </varlistentry>
617
618       <varlistentry>
619         <term><varname>SELinuxContextFromNet=</varname></term>
620          <listitem><para>Takes a boolean argument. When true, systemd
621          will attempt to figure out the SELinux label used for the
622          instantiated service from the information handed by the peer
623          over the network. Note that only the security level is used
624          from the information provided by the peer. Other parts of the
625          resulting SELinux context originate from either the target
626          binary that is effectively triggered by socket unit or from
627          the value of the <varname>SELinuxContext=</varname> option.
628          This configuration option only affects sockets with
629          <varname>Accept=</varname> mode set to
630          <literal>true</literal>. Also note that this option is useful
631          only when MLS/MCS SELinux policy is deployed. Defaults to
632          <literal>false</literal>. </para></listitem>
633       </varlistentry>
634
635       <varlistentry>
636         <term><varname>PipeSize=</varname></term>
637         <listitem><para>Takes a size in bytes. Controls the pipe
638         buffer size of FIFOs configured in this socket unit. See
639         <citerefentry><refentrytitle>fcntl</refentrytitle><manvolnum>2</manvolnum></citerefentry>
640         for details. The usual suffixes K, M, G are supported and are
641         understood to the base of 1024.</para></listitem>
642       </varlistentry>
643
644       <varlistentry>
645         <term><varname>MessageQueueMaxMessages=</varname>,
646         <varname>MessageQueueMessageSize=</varname></term>
647         <listitem><para>These two settings take integer values and
648         control the mq_maxmsg field or the mq_msgsize field,
649         respectively, when creating the message queue. Note that
650         either none or both of these variables need to be set. See
651         <citerefentry project='die-net'><refentrytitle>mq_setattr</refentrytitle><manvolnum>3</manvolnum></citerefentry>
652         for details.</para></listitem>
653       </varlistentry>
654
655       <varlistentry>
656         <term><varname>FreeBind=</varname></term>
657         <listitem><para>Takes a boolean value. Controls whether the
658         socket can be bound to non-local IP addresses. This is useful
659         to configure sockets listening on specific IP addresses before
660         those IP addresses are successfully configured on a network
661         interface. This sets the IP_FREEBIND socket option. For
662         robustness reasons it is recommended to use this option
663         whenever you bind a socket to a specific IP address. Defaults
664         to <option>false</option>.</para></listitem>
665       </varlistentry>
666
667       <varlistentry>
668         <term><varname>Transparent=</varname></term>
669         <listitem><para>Takes a boolean value. Controls the
670         IP_TRANSPARENT socket option. Defaults to
671         <option>false</option>.</para></listitem>
672       </varlistentry>
673
674       <varlistentry>
675         <term><varname>Broadcast=</varname></term>
676         <listitem><para>Takes a boolean value. This controls the
677         SO_BROADCAST socket option, which allows broadcast datagrams
678         to be sent from this socket. Defaults to
679         <option>false</option>.</para></listitem>
680       </varlistentry>
681
682       <varlistentry>
683         <term><varname>PassCredentials=</varname></term>
684         <listitem><para>Takes a boolean value. This controls the
685         SO_PASSCRED socket option, which allows
686         <constant>AF_UNIX</constant> sockets to receive the
687         credentials of the sending process in an ancillary message.
688         Defaults to <option>false</option>.</para></listitem>
689       </varlistentry>
690
691       <varlistentry>
692         <term><varname>PassSecurity=</varname></term>
693         <listitem><para>Takes a boolean value. This controls the
694         SO_PASSSEC socket option, which allows
695         <constant>AF_UNIX</constant> sockets to receive the security
696         context of the sending process in an ancillary message.
697         Defaults to <option>false</option>.</para></listitem>
698       </varlistentry>
699
700       <varlistentry>
701         <term><varname>TCPCongestion=</varname></term>
702         <listitem><para>Takes a string value. Controls the TCP
703         congestion algorithm used by this socket. Should be one of
704         "westwood", "veno", "cubic", "lp" or any other available
705         algorithm supported by the IP stack. This setting applies only
706         to stream sockets.</para></listitem>
707       </varlistentry>
708
709       <varlistentry>
710         <term><varname>ExecStartPre=</varname></term>
711         <term><varname>ExecStartPost=</varname></term>
712         <listitem><para>Takes one or more command lines, which are
713         executed before or after the listening sockets/FIFOs are
714         created and bound, respectively. The first token of the
715         command line must be an absolute filename, then followed by
716         arguments for the process. Multiple command lines may be
717         specified following the same scheme as used for
718         <varname>ExecStartPre=</varname> of service unit
719         files.</para></listitem>
720       </varlistentry>
721
722       <varlistentry>
723         <term><varname>ExecStopPre=</varname></term>
724         <term><varname>ExecStopPost=</varname></term>
725         <listitem><para>Additional commands that are executed before
726         or after the listening sockets/FIFOs are closed and removed,
727         respectively. Multiple command lines may be specified
728         following the same scheme as used for
729         <varname>ExecStartPre=</varname> of service unit
730         files.</para></listitem>
731       </varlistentry>
732
733       <varlistentry>
734         <term><varname>TimeoutSec=</varname></term>
735         <listitem><para>Configures the time to wait for the commands
736         specified in <varname>ExecStartPre=</varname>,
737         <varname>ExecStartPost=</varname>,
738         <varname>ExecStopPre=</varname> and
739         <varname>ExecStopPost=</varname> to finish. If a command does
740         not exit within the configured time, the socket will be
741         considered failed and be shut down again. All commands still
742         running will be terminated forcibly via
743         <constant>SIGTERM</constant>, and after another delay of this
744         time with <constant>SIGKILL</constant>. (See
745         <option>KillMode=</option> in
746         <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>.)
747         Takes a unit-less value in seconds, or a time span value such
748         as "5min 20s". Pass <literal>0</literal> to disable the
749         timeout logic. Defaults to
750         <varname>DefaultTimeoutStartSec=</varname> from the manager
751         configuration file (see
752         <citerefentry><refentrytitle>systemd-system.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry>).
753         </para></listitem>
754       </varlistentry>
755
756       <varlistentry>
757         <term><varname>Service=</varname></term>
758         <listitem><para>Specifies the service unit name to activate on
759         incoming traffic. This setting is only allowed for sockets
760         with <varname>Accept=no</varname>. It defaults to the service
761         that bears the same name as the socket (with the suffix
762         replaced). In most cases, it should not be necessary to use
763         this option. Note that setting this parameter might result in
764         additional dependencies to be added to the unit (see
765         above).</para></listitem>
766       </varlistentry>
767
768       <varlistentry>
769         <term><varname>RemoveOnStop=</varname></term>
770         <listitem><para>Takes a boolean argument. If enabled, any file
771         nodes created by this socket unit are removed when it is
772         stopped. This applies to AF_UNIX sockets in the file system,
773         POSIX message queues, FIFOs, as well as any symlinks to them
774         configured with <varname>Symlinks=</varname>. Normally, it
775         should not be necessary to use this option, and is not
776         recommended as services might continue to run after the socket
777         unit has been terminated and it should still be possible to
778         communicate with them via their file system node. Defaults to
779         off.</para></listitem>
780       </varlistentry>
781
782       <varlistentry>
783         <term><varname>Symlinks=</varname></term>
784         <listitem><para>Takes a list of file system paths. The
785         specified paths will be created as symlinks to the AF_UNIX
786         socket path or FIFO path of this socket unit. If this setting
787         is used, only one AF_UNIX socket in the file system or one
788         FIFO may be configured for the socket unit. Use this option to
789         manage one or more symlinked alias names for a socket, binding
790         their lifecycle together. Defaults to the empty
791         list.</para></listitem>
792       </varlistentry>
793
794       <varlistentry>
795         <term><varname>FileDescriptorName=</varname></term>
796         <listitem><para>Assigns a name to all file descriptors this
797         socket unit encapsulates. This is useful to help activated
798         services identify specific file descriptors, if multiple fds
799         are passed. Services may use the
800         <citerefentry><refentrytitle>sd_listen_fds_with_names</refentrytitle><manvolnum>3</manvolnum></citerefentry>
801         call to acquire the names configured for the received file
802         descriptors. Names may contain any ASCII character, but must
803         exclude control characters and <literal>:</literal>, and must
804         be at most 255 characters in length. If this setting is not
805         used, the file descriptor name defaults to the name of the
806         socket unit, including its <filename>.socket</filename>
807         suffix.</para></listitem>
808       </varlistentry>
809
810       <varlistentry>
811         <term><varname>TriggerLimitIntervalSec=</varname></term>
812         <term><varname>TriggerLimitBurst=</varname></term>
813
814         <listitem><para>Configures a limit on how often this socket unit my be activated within a specific time
815         interval. The <varname>TriggerLimitIntervalSec=</varname> may be used to configure the length of the time
816         interval in the usual time units <literal>us</literal>, <literal>ms</literal>, <literal>s</literal>,
817         <literal>min</literal>, <literal>h</literal>, … and defaults to 2s (See
818         <citerefentry><refentrytitle>systemd.time</refentrytitle><manvolnum>7</manvolnum></citerefentry> for details on
819         the various time units understood). The <varname>TriggerLimitBurst=</varname> setting takes a positive integer
820         value and specifies the number of permitted activations per time interval, and defaults to 200 for
821         <varname>Accept=yes</varname> sockets (thus by default permitting 200 activations per 2s), and 20 otherwise (20
822         activations per 2s). Set either to 0 to disable any form of trigger rate limiting. If the limit is hit, the
823         socket unit is placed into a failure mode, and will not be connectible anymore until restarted. Note that this
824         limit is enforced before the service activation is enqueued.</para></listitem>
825       </varlistentry>
826
827     </variablelist>
828
829     <para>Check
830     <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>
831     and
832     <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>
833     for more settings.</para>
834
835   </refsect1>
836
837   <refsect1>
838       <title>See Also</title>
839       <para>
840         <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
841         <citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
842         <citerefentry><refentrytitle>systemd.unit</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
843         <citerefentry><refentrytitle>systemd.exec</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
844         <citerefentry><refentrytitle>systemd.kill</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
845         <citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
846         <citerefentry><refentrytitle>systemd.service</refentrytitle><manvolnum>5</manvolnum></citerefentry>,
847         <citerefentry><refentrytitle>systemd.directives</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
848         <citerefentry><refentrytitle>sd_listen_fds</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
849         <citerefentry><refentrytitle>sd_listen_fds_with_names</refentrytitle><manvolnum>3</manvolnum></citerefentry>
850       </para>
851       <para>
852         For more extensive descriptions see the "systemd for Developers" series:
853         <ulink url="http://0pointer.de/blog/projects/socket-activation.html">Socket Activation</ulink>,
854         <ulink url="http://0pointer.de/blog/projects/socket-activation2.html">Socket Activation, part II</ulink>,
855         <ulink url="http://0pointer.de/blog/projects/inetd.html">Converting inetd Services</ulink>,
856         <ulink url="http://0pointer.de/blog/projects/socket-activated-containers.html">Socket Activated Internet Services and OS Containers</ulink>.
857       </para>
858   </refsect1>
859
860 </refentry>