nexmon – Blame information for rev 1

Subversion Repositories:
Rev:
Rev Author Line No. Line
1 office 1 # source: xio.help
2 # Copyright Gerhard Rieger 2001-2007
3  
4 Operating systems:
5  
6 The options and features described in this document have been implemented (but
7 not always tested) on the operating systems listed below, unless otherwise
8 noted:
9  
10 SuSE 10.1 Linux on x86
11 Solaris 8 on Sparc with gcc
12 FreeBSD 6.1 on x86
13 HP-UX B 11.11 on PA-RISC with gcc
14  
15 ===============================================================================
16  
17 The following sections describe the syntax and semantics of the socat command
18 line stream arguments.
19  
20 Usually a socat stream argument defines a one- or bidirectional stream. There
21 are two principal forms:
22 * a single stream. Depending on use of the -u or -U options and implicit
23 semantics of the stream, such an argument may be resolved to a one- or
24 twodirectional stream.
25 * two onedirectional streams, separated by '!!'. An argument of this form
26 always specifies a twodirectional stream. The first single stream is only used
27 for reading data, and the second is only used for writing data.
28  
29  
30 The general structure of a single stream is:
31 keyword[:required-parameters][,options]
32  
33 The options part starts with the first ',' of the argument. The required
34 parameters are separated by ':' from their predecessor. The last required
35 parameter is terminated by the end of the argument or by the first ',' that
36 iitroduces the first option. The options are separated with ','. The last
37 option is terminated by end-of-string or by '!!'.
38  
39 The are some abbreviations defined that allow to drop the keyword. In these
40 cases the argument syntax is:
41 required-parameter[:required-parameters][,options]
42 The implemented abbreviations are:
43 short form canonical form
44 number FD:number # decimal number
45 path GOPEN:path # must must contain at least one '/' and must not contain ':' or ',' and must not start with a decimal digit
46  
47 ===============================================================================
48  
49  
50 Addresses:
51  
52 Every address specification starts with a keyword or an abbreviation. These
53 keywords are case insensitive.
54 Note: because the option group ANY applies for all addresses, it is not
55 mentioned explicitely below.
56  
57  
58 Bidirectional only addresses:
59 -----------------------------
60  
61 PIPE
62 FIFO
63 ECHO
64  
65 Opens an unnamed pipe (fifo) where outbound traffic is sent to and inbound
66 traffic is read from. The special semantics of pipes results in an echo like
67 behaviour.
68 Option groups: FD, FIFO (no specific FIFO options are defined yet)
69  
70  
71 Onedirectional only addresses:
72 ------------------------------
73  
74 Currently all addresses may be used bidirectional.
75 Note: for regular files, behaviour when being used bidirectionally is
76 undefined.
77  
78  
79 One- and bidirectional addresses:
80 ---------------------------------
81  
82 STDIO
83 - ("minus")
84  
85 Uses stdin (FD 0) for inbound traffic and/or stdout (FD 1) for outbound traffic
86 on this address.
87 Option groups: FD; others dependent on actual types of stdin and stdout (FIFO,
88 CHR, BLK, REG, and/or SOCKET).
89  
90  
91 STDIN
92  
93 Uses stdin for traffic. This might fail for outbound traffic.
94 Option groups: FD; dependent on actual type of stdin (FIFO, CHR, BLK, REG, or
95 SOCKET).
96  
97  
98 STDOUT
99  
100 Uses stdout for traffic. This might fail for inbound traffic.
101 Option groups: FD; dependent on actual type of stdout (FIFO, CHR, BLK, REG, or
102 SOCKET).
103  
104  
105 STDERR
106  
107 Uses stdout for traffic. This might fail for inbound traffic.
108 Option group: FD; dependent on actual types of sterr (FIFO, CHR, BLK, REG, or
109 SOCKET).
110  
111  
112 FD:num
113 num
114  
115 Uses the already existing file descriptor <num> for traffic.
116 Option groups: FD; dependent on actual types of file descriptor (FIFO, CHR,
117 BLK, REG, or SOCKET).
118  
119  
120 READLINE
121  
122 Uses the GNU readline function and history capabilies (best known from bash).
123 It always works on stdin and stdout; if stdio is not a tty, readline does not
124 seem to work correctly.
125 Because readline is blocking during line editing, it does not fit well into
126 socats I/O philosophy.
127 socat integrates readline by waiting in the select call as usual; when stdin
128 reports available data, socat invokes readline(). readline blocks until the
129 user presses ENTER or EOF. Data on socats other stream is not handling in this
130 time.
131 socat controls the ECHO flag of the stdin tty (off during select(), on for
132 readline()).
133 When using socat with readline as front end to a service like telnet, POP3 or
134 an other authenticated service, please note that the password is entered as
135 ordinary data, thus appears on the screen!
136 Option groups: FD, READLINE, TERMIOS
137 Useful options: history-file
138  
139  
140 OPEN:path
141  
142 Applies an open() system call to the given path. If the path does not exist a
143 file is created only if the option create is used; if a file, pipe, or device
144 with this name already exists it is opened. Open for reading and/or writing
145 depends on the rw parameter of the xioopen call, or on usage in a socat
146 argument. If no perm option is used, xioopen uses 600 (which might be modified
147 by umask then).
148 Applying this function to files conforms to the semantics as described by the
149 open(2) man page.
150 Opening device files, like /dev/ttyS*, might block until the device gets active
151 (until some peer is connected)
152 With existing named pipes (fifos) please note the usual semantics:
153 Opening the pipe in read/write mode results in an echo service;
154 Opening the pipe in read mode blocks until a writer opens the pipe (close
155 by writer gives EOF for the reader); with option nonblock the open call does
156 not block.
157 Opening the pipe in write mode blocks until a reader opens the pipe (close
158 by reader gives "broken pipe" error on next write); with option nonblock the
159 open call terminates with error "no such device or address" in absence of a
160 reader.
161 Opening a named UNIX stream socket with or without a listening peer might
162 succeed depending on the operating system, but
163 the resulting file descriptor erronously reports available data immediately,
164 and the following read() or write() call always fails with "invalid
165 argument". Even worse, while such a filesystem entry is identified as socket by
166 "file" command and by fstat(), getsockopt() after open() gives error "Socket operation on non-socket".
167 Use GOPEN for reasonable behaviour!
168 Option groups: FD, OPEN, NAMED, and specific for data object type (FILE, FIFO,
169 CHRDEV+TERMIOS, BLKDEV, or SOCKET).
170  
171  
172 GOPEN:path
173 path
174  
175 "Generic open". Tries to open the given path in a smarter way. If the path
176 exists and is a socket, it is connected to; if connecting fails,
177 socat assumes a datagram socket and later uses sendto() calls for data
178 transfer.
179 If the path exists and is not a socket, it is opened:
180 in RDONLY environment for reading from position 0,
181 in WRONLY environment for appending (O_APPEND),
182 in RDWR env. for reading and/or writing starting from position 0.
183 If the path does not exist:
184 in RDONLY environment this is an error
185 in WRONLY environment the file is created (O_CREAT)
186 in RDWR env. for reading and/or writing starting from position 0.
187 However, these flags may be overriden by user supplied options
188 (e.g., "append=0")
189 Option groups: FD, NAMED, and specific for data object type (FILE, FIFO,
190 CHRDEV+TERMIOS, BLKDEV, or SOCKET).
191  
192  
193 CREATE:path
194 CREAT:path
195  
196 Opens the named file with creat(). With UNIX semantics, this address is just a
197 variation of the OPEN address, see there for more details.
198 Note: The creat() system call does not create a completely new file, but
199 inherits some properties of the old file if it exists, e.g. permissions. Use
200 option "unlink-early" to remove the old entry before.
201 Option groups: FD, NAMED, FILE
202 Useful options: unlink-late
203  
204  
205 PIPE:path
206 FIFO:path
207  
208 Creates and opens a pipe if path does not exist; opens path if it already
209 exists.
210 Option groups: FD, NAMED, FIFO
211 Note: this address uses the mknod(2) system call to create the named pipe. On
212 FreeBSD, this call requires root privilege
213  
214  
215 EXEC:cmdline
216  
217 Forks off a child process after establishing a bidirectional communication
218 channel (with socketpair, pipes, or pty). The child then starts "cmdline" with
219 execvp().
220 Note: spaces and shell meta characters in cmdline must be quoted if socat is
221 invoked from the command line.
222 Option groups: FD, FORK, EXEC, SOCKET, SOCK_UNIX, FIFO, TERMIOS
223 Useful options: path, fdin, fdout, chroot, su, pty, stderr
224 Note: on AIX, search permissions on /dev/pts/ are required to use option pty.
225  
226  
227 SYSTEM:cmdline
228  
229 Forks off a child process after establishing a bidirectional communication
230 channel (with socketpair, pipes, or pty). The child then starts "cmdline" with
231 system().
232 Note: spaces and shell meta characters in cmdline must be quoted if socat is
233 invoked from the command line.
234 Option groups: FD, FORK, EXEC, SOCKET, SOCK_UNIX, FIFO, TERMIOS
235 Useful options: path, fdin, fdout, chroot, su, pty, stderr
236 Note: there are slightly different semantics with options pty or pipes, because
237 they do not communicate an EOF condition to the shell process. Therefore, the
238 shell process and its child do not terminate due to EOF, but are explicitly
239 killed during close of the socat file handle. Consider using
240 exec:'/bin/sh -c command',pty...
241  
242  
243 UNIX:path
244 LOCAL:path
245  
246 Connects to a UNIX domain socket.
247 Option groups: FD, SOCKET, SOCK_UNIX
248 NOTE: you need rw permissions to connect to a local socket. My Linux answers
249 with "connection refused" to insufficient permissions, not existing
250 socket, not a socket, or just a socket entry without a listening process.
251 NOTE: this address does not implement option group NAMED because its connect
252 call succeeds only if there is already someone listening, but at this point the
253 NAMED group actions no longer affect this socket, only the fs entry.
254  
255  
256 UNIX-listen:path
257 UNIX-l:path
258  
259 Create a listening UNIX domain socket. With the fork option, for each accepted
260 connection a new process is forked off, and more connections are accepted on
261 the parent socket. Without fork, only the first connection is accepted.
262 Option groups: FD, NAMED, SOCKET, SOCK_UNIX, LISTEN, CHILD
263  
264  
265 IP:host:protocol
266 IP4:host:protocol
267  
268 Open a raw socket with IP4 protocol. This mode sends packets to and accepts
269 them only from host. protocol is a number from 0 to 255, with 1 meaning ICMP,
270 6..TCP, 17..UDP, 255..raw IP; 0 might be unsupported by the local IP stack,
271 resulting in an error.
272 Requires root privilege.
273 Note: my Linux 2.4.10 kernel seems to drop payloads smaller than 8
274 bytes on their way from the network to the application.
275 Option groups: FD, SOCKET, SOCK_IP
276  
277  
278 TCP:host:port
279 TCP4:host:port
280 INET:host:port
281  
282 Create a TCP/IP4 client socket and connect to the given host/port combination.
283 Option groups: FD, SOCKET, SOCK_IP, IPAPP, IP_TCP
284 Useful options: crlf, bind, tos, mtudiscover, mss, nodelay,
285  
286  
287 TCP-l:port
288 TCP-listen:port
289 TCP4-l:port
290 TCP4-listen:port
291 INET-l:port
292 INET-listen:port
293  
294 Create a TCP/IP4 server socket and wait for an incoming connection. With the
295 fork option, for each accepted connection a new process is forked off, and more
296 connections are accepted on the parent socket. Without fork, only the first
297 connection is accepted.
298 Option groups: FD, SOCKET, SOCK_IP, IPAPP, IP_TCP, LISTEN, RANGE, CHILD
299 Useful options: fork, crlf, bind, backlog, mtu, tcpwrap
300  
301  
302 UDP:host:port
303 UDP-CONNECT:host:port
304  
305 Connects to port on host using UDP/IP version 4 or 6
306 depending on address specification, name resolution, or option pf.
307 Please note that,
308 due to UDP protocol properties, no real connection is established; data has
309 to be sent for `connecting' to the server, and no end-of-file condition can
310 be transported.
311 Option groups: FD, SOCKET, SOCK_IP4, SOCK_IP6, IP_UDP
312 Useful options: ttl
313  
314 UDP4:host:port
315 UDP4-CONNECT:host:port
316  
317 Like UDP-CONNECT, but only supports IPv4 protocol.
318 Option groups: FD, SOCKET, SOCK_IP, IPAPP, IP_UDP
319  
320  
321 UDP-listen:port
322 UDP-l:port
323  
324 Emulates a UDP server in the same way as netcat: Create a UDP/IP4 socket and
325 bind to the given port. Then wait for the first packet, get its sender address
326 (without consuming its data), connect() to this address, and leave xioopen().
327 Afterwards, our socket only communicates with this peer.
328 Option groups: FD, SOCKET, SOCK_IP, IPAPP, IP_UDP, RANGE
329 Note: with fork option, child processes might hang forever because UDP cannot
330 transport EOF conditions.
331  
332  
333 #UDP-dgram:port
334 #UDP-d:port
335 #
336 #Create and use a pure datagram oriented UDP socket.
337 #The following restrictions apply:
338 #* range option does not work
339 #* de facto this is a read-only endpoint: sending data to 0.0.0.0 might fail.
340  
341  
342 TCP6:host:port
343 INET6:host:port
344  
345 Create a TCP/IP6 client socket and connect to the given host/port combination.
346 Option groups: FD, SOCKET, SOCK_IP, IPAPP, IP_TCP
347 Note: Address syntax parsing is awkward, since the IPv6 address word separator
348 is ':' which is used as port separator too.
349 An FTP listen entry looks in netstat ":::21"!
350  
351  
352 TCP6-l:port
353 TCP6-listen:port
354 INET6-l:port
355 INET6-listen:port
356  
357 Create a TCP server socket and wait for an incoming connection. With the fork
358 option, for each accepted connection a new process is forked off, and more
359 connections are accepted on the parent socket. Without fork, only the first
360 connection is accepted.
361 Option groups: FD, SOCKET, SOCK_IP, IPAPP, IP_TCP, LISTEN, RANGE, CHILD
362  
363  
364 SOCKS4:sockd:host:port
365 SOCKS:sockd:host:port
366  
367 Use a socks server, socks protocol version 4, to build a TCP (IPv4) connection.
368 Sockd is the name or address of the socks server, host and port specify the
369 destination address. Use option socksport if the socks server does not listen
370 on port 1080.
371 Option groups: FD, SOCKET, SOCK_IP, IPAPP, IP_TCP, IP_SOCKS
372 Useful options: sp, socksport, socksuser
373 Note: If you do not specify option socksuser, xioopen tries to derive it from
374 environment: LOGNAME or USER, and might therefore undisclose your identity.
375  
376  
377 SOCKS4a:sockd:host:port
378  
379 Like SOCKS4, but use the socks version 4a extension for destination name
380 resolution on the socks server.
381 Option groups: FD, SOCKET, SOCK_IP, IPAPP, IP_TCP, IP_SOCKS
382  
383  
384 PTY
385  
386 Creates a pseudo terminal (pty) and uses its master side. Another process may
387 open the pty´s slave side using it like a serial line or terminal.
388 Option groups: FD,NAMED,PTY,TERMIOS
389 Useful options: link, openpty, mode, user, group
390  
391  
392 OPENSSL-CONNECT:host:port
393 OPENSSL:host:port
394  
395 Tries to establish a SSL connection to port on host using TCP/IPv4.
396 Note: this is currently only an experimental integration of openssl!
397 (it does not provide any trust between the peers because is does not check
398 certificates!)
399 Option groups: FD,SOCKET,SOCK_IP4,IP_TCP,OPENSSL,RETRY
400 Useful options: cipher, method, verify, cafile, capath, certificate, bind, sourceport, retry
401  
402  
403 OPENSSL-LISTEN:port
404  
405 Listens on tcp4 port. When a connection is accepted, this address behaves as
406 SSL server.
407 Option groups: FD,SOCKET,SOCK_IP4,TCP,LISTEN,CHILD,RANGE,OPENSSL,RETRY
408 Usefule options: cipher, method, verify, cafile, capath, certificate, retry
409  
410  
411 PROXY:proxy:host:port
412 PROXY-CONNECT:proxy:host:port
413  
414 Connects to an HTTP proxy server on port 8080 using TCP/IPv4, and sends a
415 CONNECT request for host:port. If the proxy grants access and succeeds to
416 connect to the target, data transfer between socat and the target can
417 start. Note that the traffic need not be HTTP but can be an arbitrary
418 protocol.
419 Option groups: FD,SOCKET,IP4,TCP,HTTP
420 Useful options: proxyport, ignorecr, proxyauth, crnl, bind, mss, sourceport
421  
422 ===============================================================================
423  
424 Option Groups:
425  
426 Each option is member of one option group. Address definitions specify which
427 option groups they support. This allows to reject unapplyable options in an
428 early stage of address processing.
429  
430 Address groups are identified by single bit positions. Option definitions
431 specify to which group the option belongs (some options are member or more than
432 one group). Addresses use a bit pattern to specify which option groups they
433 support.
434  
435 Currently the following option groups are defined:
436  
437 GROUP_FD: All addresses that result in one or more file descriptors. These
438 options are typically applied with fcntl() or some special calls like fchown()
439 or fchmod(). There is no documented restriction to apply these functions to any
440 file descriptor; but they are not always meaningful, and sometimes lead to OS
441 exceptions.
442  
443 GROUP_APPL: All addresses. The options do not need file descriptors, because
444 they manipulate the data streams at application level (ignoreeof, line
445 terminator conversion).
446  
447 GROUP_PROCESS: For options that change process related attributes, like user id
448 (setuid).
449  
450 GROUP_FIFO: Options for pipes. Currently not used.
451  
452 GROUP_CHR: Options for character devices. Currently not used.
453  
454 GROUP_BLK: Options for block devices. Currently not used.
455  
456 GROUP_REG, GROUP_FILE: Options for regular files. Currently not used.
457  
458 GROUP_SOCKET: Options for arbitrary type sockets, e.g. so-sndbuf, so-linger.
459  
460 GROUP_NAMED: Options for file system entries, e.g. user-early, unlink.
461  
462 GROUP_OPEN: Options that are applied with the open() system call.
463  
464 GROUP_EXEC: Options for program or script execution, e.g. path.
465  
466 GROUP_FORK: Options for communication with children processes, e.g. fdin, pty.
467  
468 GROUP_LISTEN: Options for listening sockets. Only backlog.
469  
470 GROUP_DEVICE: not used
471  
472 GROUP_CHILD: Options for addresses that may fork off independent child
473 processes. Currently only option fork.
474  
475 GROUP_RETRY: Options for failure handling. Currently not used.
476  
477 GROUP_TERMIOS: Options for terminal settings, e.g. echo, b38400, raw.
478  
479 GROUP_READLINE: Options for readline (GNU line editing and history).
480  
481 GROUP_RANGE: Options for checking peer address. Currently only range.
482  
483 GROUP_SOCK_UNIX: Options for UNIX domain sockets. Currently not used.
484  
485 GROUP_SOCK_IP4: Options for IP4 sockets. Currently not used.
486  
487 GROUP_SOCK_IP6: Options for IP6 sockets. Currently not used.
488  
489 GROUP_SOCK_IP: Options for IP sockets, e.g. mtu, ip-options, ttl.
490  
491 GROUP_IP_UDP: Options for UDP sockets. Currently not used.
492  
493 GROUP_IP_TCP: Options for TCP sockets, e.g. maxseg, nodelay.
494  
495 GROUP_IPAPP: Options for UDP and TCP sockets. Currently only sourceport.
496  
497 GROUP_IP_SOCKS4: Options for SOCKS client connections, e.g. socksuser.
498  
499 GROUP_PROCESS: Options for process wide attributes, e.g. su, chroot.
500  
501 GROUP_APPL: Options handled by application. Currently not used.
502  
503 GROUP_PTY: Options for pseudo terminals. Used with addresses PTY, EXEC, and
504 SYSTEM.
505  
506 GROUP_OPENSSL: Options for the OPENSSL address.
507  
508 There are "combined" group definitions too:
509 #define GROUP_ANY (GROUP_PROCESS|GROUP_APPL)
510 #define GROUP_ALL 0xffffffff
511  
512 ===============================================================================
513  
514 Address Options
515  
516 Address options are identified by a case insensitive keyword. If the options
517 needs a parameter value, the option syntax is always:
518 OPTION=VALUE
519 Currently there do not exist options that take more than one argument;
520 sometimes, two values are combined to form one argument value, e.g. IP4 address
521 and port:
522 192.168.0.1:80
523  
524 Note:
525 "Type" describes the type of data that may or must be given to the option and
526 that is passed to the system. There are some options with boolean semantics
527 (on/off or yes/no), but their values are passed to the system with an int
528 parameter. This situation is indicated as "Logical type: bool" and "Physical
529 type: int". In this case xioopen passes the physical value to the system,
530 giving the user one more hacking playground.
531  
532  
533 Option: append
534  
535 Type: BOOL
536 Option group: FD
537 Phase: LATE
538 Platforms: all (UNIX98)
539  
540 Sets the O_APPEND flag via a fcntl() call and F_SETFL; with OPEN type
541 addresses, this flag is applied with the open() call. All data written is
542 appended to the actual file end, even if other processes have written to or
543 truncated the file in the meantime.
544  
545  
546 Option: async
547  
548 Type: BOOL
549 Option group: FD
550 Phase: LATE
551 Platforms: FreeBSD, Linux, SunOS
552  
553 Sets the O_ASYNC (or FASYNC) flag via a fcntl() call and F_SETFL; with FILE
554 addresses, this flag is applied with the open() call. Consult your kernel
555 documentation for effects of this flag.
556 NOTE: socat does not handle the SIGIO signal.
557  
558  
559 Option: cloexec
560  
561 Type: BOOL
562 Option group: FD
563 Phase: LATE
564 Platforms: all
565  
566 Sets the FD_CLOEXEC (close-on-exec) flag on the file descriptor via a
567 fcntl()call with F_SETFD. Use with caution, because xioopen() makes use of this
568 flag to archieve what we consider the most reasonable behaviour; using this
569 option overrides xioopen's setting!
570  
571  
572 Option: flock-ex
573 Aliases: flock, lock
574  
575 Type: BOOL
576 Option group: FD
577 Phase: FD
578 Platforms: FreeBSD, Linux
579  
580 Applies the flock(fd, LOCK_EX) call to the file descriptor(s). This locks a file
581 exclusively (but only for processes also using flock() on this file - otherwise, they seem to have unrestricted access).
582 If the file is already locked with flock, our flock call blocks until the other
583 processes lock is released.
584 Note: the "lock" option name alias applies to this option only
585 if the fcntl locking mechanism is not available on a platform.
586  
587  
588 Option: flock-ex-nb
589 Aliases: flock-nb
590  
591 Type: BOOL
592 Option group: FD
593 Phase: FD
594 Platforms: FreeBSD, Linux
595  
596 Applies the flock(fd, LOCK_EX|LOCK_NB) call to the file descriptor(s). This locks a file
597 exclusively (but only for processes also using flock() on this file -
598 otherwise, they seem to have unrestricted access).
599 If the file is already locked with flock, our flock call returns the error
600 "Resource temporarily unavailable".
601  
602  
603 Option: flock-sh
604  
605 Type: BOOL
606 Option group: FD
607 Phase: FD
608 Platforms: FreeBSD, Linux
609  
610 Applies a shared advisory lock to the file using the flock(fd, LOCK_SH) call.
611 This prevents processes from locking the file exclusively.
612 If the file has already an exclusive lock, our flock call blocks until the
613 other processes lock is released.
614  
615  
616 Option: flock-sh-nb
617  
618 Type: BOOL
619 Option group: FD
620 Phase: FD
621 Platforms: FreeBSD, Linux
622  
623 Applies a shared advisory lock to the file using the flock(fd, LOCK_SH|LOCK_NB) call.
624 This prevents processes from locking the file exclusively.
625 If the file has already an exclusive lock, our flock call returns with error
626 "Resource temporarily unavailable".
627  
628  
629 Option: f-setlk-rd
630 Aliases: setlk-rd
631  
632 Type: BOOL
633 Option group: FD
634 Phase: FD
635 Platforms: all
636  
637 Locks the complete file with fcntl(fd, F_SETLK, {F_RDLCK}) (complete means from its
638 start to its maximal length). This locks the file exclusively (but only if the
639 other processes accessing this file also use f-setlk or f-setlkw - otherwise,
640 they seem to have unrestricted access). If the file is already locked with
641 f-setlk or f-setlkw, the fcntl call blocks until release by the other process.
642  
643  
644 Option: f-setlk-wr
645 Aliases: f-setlk, setlk-wr, setlk
646  
647 Type: BOOL
648 Option group: FD
649 Phase: FD
650 Platforms: all
651  
652 Locks the complete file with fcntl(fd, F_SETLK, {F_WRLCK}) (complete means from its
653 start to its maximal length). This locks the file exclusively (but only if the
654 other processes accessing this file also use f-setlk or f-setlkw - otherwise,
655 they seem to have unrestricted access). If the file is already locked with
656 f-setlk or f-setlkw, the fcntl call blocks until release by the other process.
657  
658  
659 Option: f-setlkw-rd
660 Aliases: setlkw-rd
661  
662 Type: BOOL
663 Option group: FD
664 Phase: FD
665 Platforms: all
666  
667 Locks the complete file with fcntl(fd, F_SETLKW, {F_RDLCK}) (complete means from its
668 start to its maximal length). This locks the file exclusively (but only if the
669 other processes accessing this file also use f-setlk or f-setlkw - otherwise,
670 they seem to have unrestricted access). If the file is already locked with
671 f-setlk or f-setlkw, fcntl returns with EAGAIN.
672  
673  
674 Option: f-setlkw-wr
675 Aliases: setlkw-wr, f-setlkw, setlkw, lockw, lock
676  
677 Type: BOOL
678 Option group: FD
679 Phase: FD
680 Platforms: all
681  
682 Locks the complete file with fcntl(fd, F_SETLKW, {F_WRLCK}) (complete means from its
683 start to its maximal length). This locks the file exclusively (but only if the
684 other processes accessing this file also use f-setlk or f-setlkw - otherwise,
685 they seem to have unrestricted access). If the file is already locked with
686 f-setlk or f-setlkw, fcntl returns with EAGAIN.
687  
688  
689 Option: fork
690  
691 Type: BOOL
692 Option group: CHILD
693 Phase: PASTACCEPT
694 Platforms: all
695  
696 Without fork (or fork=0), the listening process accepts exactly one
697 connections, and terminates afterwards. With fork set, it forks off a new socat
698 child process for each incoming connection.
699 It is very important to understand what socat does with this fork option:
700 The parent process remains in a loop of accept() and fork() calls until
701 terminated from outside. The child process leaves this loop and goes on with
702 the socat processing. If the fork occurs in the first address argument, the
703 child process continues with parsing and activating the second address
704 argument. This will in most cases be what you want or expect.
705 If the fork call occurs in socats second address argument, all children will
706 inherit and share the already activated first address.
707  
708  
709 Option: group=value
710 Aliases: gid=value
711  
712 Type: GIDT or unsigned int
713 Option group: NAMED
714 Type: GIDT
715 Platforms: all
716  
717 Takes one argument, a UNIX group name or a numeric group id. The first
718 character of value is a digit for group ids.
719 With NAMED addresses this option is applied via a chown() call, with a
720 fchown() call otherwise.
721 If groupname is a name it must be a valid groupname from /etc/group and is
722 converted to a group id with a getgrnam(3) call.
723 On most modern operating systems, the owner of the process must be member of
724 the group being set; only root may set any group, even numbers without group
725 name.
726 A Linux 2.2.10 kernel SIGSEGVs the process in the fchown() call when this
727 option is used with a socket or pipe. Is fixed with Linux 2.4.
728 LINUXBUG TESTCASE:
729 SH1: socat -D - unix-l:/tmp/socket,unlink-early
730 SH2: socat -d -d -d -d -D gopen:/tmp/socket,group=floppy -
731  
732  
733 Option: group-late=value
734  
735 Type: GIDT or string
736 Option group: FD
737 Type: GIDT
738 Platforms: all
739  
740 Takes one argument, a UNIX group name or a numeric group id. The first
741 character of value is a digit for group ids.
742 This option is applied via a fchown(2) call.
743 If groupname is a name it must be a valid groupname from /etc/group and is
744 converted to a group id with a getgrnam(3) call.
745 On most modern operating systems, the owner of the process must be member of
746 the group being set; only root may set any group, even numberic group ids
747 without group name.
748  
749  
750 Option: o-nonblock
751 Aliases: nonblock
752  
753 Type: BOOL
754 Option group: FD
755 Phase: FD
756 Platforms: all (UNIX98)
757  
758 Sets the O_NONBLOCK flag of a file descriptor via a fcntl(2) call and F_SETFL;
759 with OPEN type addresses, this flag is applied with the open() call.
760 It does not change the behaviour of socat's data transfer loop because socat
761 uses select() which blocks nevertheless.
762 Currently is has only two documented uses:
763 1) With address TCP, the connect() call
764 does not block; instead, it continues through the open step. The channel is
765 passed to the select() call. If something is written to the channel before it
766 is connected, this is an error. If connection fails, a read condition occurs
767 and read() returns the error.
768 2) Opening a named pipe does not block with this option.
769  
770  
771 Option: o-ndelay
772 Aliases: ndelay
773  
774 Type: BOOL
775 Option group: FD
776 Phase: LATE
777 Platforms: HP-UX, SunOS (UNIX98)
778  
779 Under Solaris it sets the O_NDELAY of the file descriptor via a fcntl(2) call
780 and F_SETFL; with OPEN type addresses, this flag is applied with the open()
781 call.
782 With all other operating systems, this is just another name for the nonblock option.
783  
784  
785 Option: o-noatime
786 Aliases: noatime
787  
788 Type: BOOL
789 Option group: FD
790 Phase: FD
791 Platforms: Linux
792  
793 Sets the O_NOATIME flag of a file descriptor via a fcntl(2) call and F_SETFL;
794 with OPEN type addresses, this flag is applied with the open() call.
795 It prevents the access time from being updated during read operations.
796  
797  
798 Option: perm=value
799 Aliases: mode=value
800  
801 Type: MODET (mode_t)
802 Option group: NAMED
803 Phase: FD
804 Platforms: all
805  
806 This option changes the mode (permissions) of an addresses inode. xioopen
807 tries to apply this option already during open phase. If the address does not
808 have a open phase or if the option cannot be applied there, the value is
809 applied directly on the file descriptor afterwards.
810 It is up to you to (1) have the permission to change the permissions, and (2)
811 not to set permissions that prevent you from performing your transactions :-)
812 NOTE: At least with some Linux 2.2, setting permissions on an existing file or
813 device with fchmod() does not change the permissions of its inode on disk. See
814 perm-early which uses chmod() instead.
815 NOTE: At least with some Linux 2.2, restricting mode on file descriptors does
816 not restrict this file descriptors data transfer capabilities.
817  
818  
819 Option: perm-late=value
820  
821 Type: MODET (mode_t)
822 Option group: FD
823 Phase: LATE
824 Platforms: all
825  
826 This option changes the mode (permissions) of a file descriptor with fchmod()
827 in the last phase of address processing.
828  
829  
830 Option: seek-set=offset
831 Aliases: lseek=offset, seek=offset
832  
833 Type: OFF32 or OFF64
834 Option group: BLK
835 Phase: LATE
836 Platforms: HP-UX, Linux, SunOS
837  
838 Positions the file at the given absolute offset, using lseek() (or lseek64() if
839 available) with SEEK_SET.
840  
841  
842 Option: seek-cur=offset
843  
844 Type: OFF32 or OFF64
845 Option group: BLK
846 Phase: LATE
847 Platforms: HP-UX, Linux, SunOS
848  
849 Positions the file at the given offset from the current position,
850 using lseek() (or lseek64() if available) with SEEK_SET.
851  
852  
853 Option: seek-end=offset
854  
855 Type: OFF32 or OFF64
856 Option group: BLK
857 Phase: LATE
858 Platforms: HP-UX, Linux, SunOS
859  
860 Positions the file at the given offset from the file end,
861 using lseek() (or lseek64() if available) with SEEK_END.
862  
863  
864 Option: lseek32-set=offset
865 Aliases: lseek32=offset
866  
867 Type: OFF32
868 Option group: BLK
869 Phase: LATE
870 Platforms: HP-UX, Linux, SunOS
871  
872 Positions the file at the given absolute offset using lseek() with SEEK_SET.
873 This call might fail for non
874 random access data objects like character devices or sockets.
875 NOTE: this option seems to be useless on files with O_APPEND set.
876  
877  
878 Option: lseek32-cur=offset
879  
880 Type: OFF32 (instead of off_t)
881 Option group: BLK
882 Phase: LATE
883 Platforms: HP-UX, Linux, SunOS
884  
885 Positions the file at the given offset from the current position using lseek()
886 with SEEK_CUR. This call
887 might fail for non random access data objects like character devices.
888 On Linux, the seek() call fails on pipes, sockets and ttys but works on files
889 and /dev/null
890 NOTE: this option seems to be useless on files with O_APPEND set.
891  
892  
893 Option: lseek32-end=offset
894  
895 Type: OFF32
896 Option group: BLK
897 Phase: LATE
898 Platforms: HP-UX, Linux, SunOS
899  
900 Positions the file at the given offset from the file end using lseek() with
901 SEEK_END. This call might fail
902 for non random access data objects like character devices.
903 NOTE: this option seems to be useless on files with O_APPEND set.
904  
905  
906 Option: lseek64-set=offset
907 Aliases: lseek64=offset
908  
909 Type: OFF64
910 Option group: BLK
911 Phase: LATE
912 Platforms: all
913  
914 Positions the file at the given absolute offset using lseek64() with SEEK_SET.
915 This call might fail for non
916 random access data objects like character devices or sockets.
917 NOTE: this option seems to be useless on files with O_APPEND set.
918  
919  
920 Option: lseek64-cur=offset
921  
922 Type: OFF64
923 Option group: BLK
924 Phase: LATE
925 Platforms: all
926  
927 Positions the file at the given offset from the current position using
928 lseek64() with SEEK_CUR. This call
929 might fail for non random access data objects like character devices.
930 NOTE: this option seems to be useless on files with O_APPEND set.
931  
932  
933 Option: lseek64-end=offset
934  
935 Type: OFF64
936 Option group: BLK
937 Phase: LATE
938 Platforms: all
939  
940 Positions the file at the given offset from the file end using lseek64() with
941 SEEK_END. This call might fail
942 for non random access data objects like character devices.
943 NOTE: this option seems to be useless on files with O_APPEND set.
944  
945  
946 Option: chroot=path
947  
948 Type: STRING
949 Option group: PROCESS
950 Phase: LATE
951 Platforms: all
952  
953 Invokes the chroot() system call with the given path after the address
954 resolution, so the path names of the address must be specified with absolute
955 pathes.
956 Note: when you combine chroot with substuser, with substuser applied within the
957 chroot environment, usually the etc/passwd and etc/group files in the chroot
958 environment are used for group set etc.
959 See appendix "generating a sandbox"
960  
961  
962 Option: chroot-early=path
963  
964 Type: STRING
965 Option group: PROCESS
966 Phase: EARLY
967 Platforms: all
968  
969 Invokes the chroot() system call with the given path before the address is
970 resolved, this means before file opening in OPEN, GOPEN and before program
971 execution in EXEC and SYSTEM, so their pathes must be specified related to
972 their chroot directory.
973 See appendix "generating a sandbox"
974  
975  
976 Option: setgid=group
977  
978 Type: GIDT (gid_t or string)
979 Option group: PROCESS
980 Phase: LATE2
981 Platforms: all
982  
983 Invokes setgid() with the group id. For EXEC and SYSTEM this call is performed
984 for the child process after the fork and therefore does not affect the socat
985 process directly. For LISTEN group addresses with fork option, this call is
986 performed only on the child processes. For all other addresses, it is performed
987 in the late phase of address processing, so it does not affect the address
988 where it is used, but for the next address (if any), and for the data loop.
989 Note: setgid() does not remove any groups from the current process group set.
990  
991  
992 Option: setuid=user
993  
994 Type: UIDT (uid_t or string)
995 Option group: PROCESS
996 Phase: LATE2
997 Platforms: all
998  
999 Invokes setuid() with the user id. For EXEC and SYSTEM this call is performed
1000 for the child process after the fork and therefore does not affect the socat
1001 process directly. For LISTEN group addresses with fork option, this call is
1002 performed only on the child processes. For all other addresses, it is performed
1003 in the late phase of address processing, so it does not affect the address
1004 where it is used, but the next address (if any), and the data loop.
1005 Note: setuid() is invoked AFTER setgid(), if both are applied.
1006 Note: setuid() does not influence the processes group set; in most cases, you
1007 want to prefer substuser option.
1008  
1009  
1010 Option: substuser=user
1011 Aliases: su=user
1012  
1013 Type: UIDT (uid_t or string)
1014 Option group: PROCESS
1015 Phase: LATE2
1016 Platforms: all
1017  
1018 Tries to switch the process to the given user and its group set.
1019 To make sure that the groups are set correctly for the new process owner, the
1020 system calls initgroups(), setgid(), and setuid() are invoked with the
1021 appropriate arguments.
1022 On sane operating system, this option requires root privileges.
1023 Note: this option sets the user and group ids of the process, but does not
1024 change the environment; therefore, all variables including $USER, $HOME,
1025 $LOGNAME, $SHELL etc. are inherited from the old users environment.
1026 Note: starting a SETUID program after applying substuser or setuid gives the
1027 process the SETUID owner, which might give root privileges again.
1028  
1029  
1030 Option: substuser-delayed=user
1031 Aliases: su-d=user
1032  
1033 Type: UIDT (unsigned int or string)
1034 Option group: PROCESS
1035 Phase: INIT
1036 Platforms: all
1037  
1038 Like substuser, but reads the user and group information in an early phase of
1039 address processing, but applies the appropriate system calls in a late
1040 phase. This allows to use user information from the host in a chroot
1041 environment, without exposing this data within the sandbox.
1042  
1043  
1044 Option: o-trunc
1045 Aliases: trunc
1046  
1047 Type: BOOL
1048 Option group: OPEN
1049 Phase: LATE
1050 Platforms: all
1051  
1052 Sets the O_TRUNC flag of the open() call, thus truncating the file to zero
1053 length.
1054 #! block devices?
1055  
1056  
1057 Option: ftruncate=value
1058 Aliases: truncate=value
1059  
1060 Type: OFF32 or OFF64
1061 Option group: REG
1062 Phase: LATE
1063 Platforms: HP-UX, Linux, SunOS
1064  
1065 Invokes the ftruncate() (or ftruncate64() if available) call for the file descriptor with the given value,
1066 thus reducing the length of the file to the given length.
1067 On Linux, ftruncate() fails on sockets and devices but works on regular files
1068 and pipes.
1069 #! block devices?
1070 Note: AIX docu says: for regular files only
1071  
1072  
1073 Option: ftruncate32=value
1074  
1075 Type: OFF32
1076 Option group: REG
1077 Phase: LATE
1078 Platforms: HP-UX, Linux, SunOS
1079  
1080 Invokes the ftruncate() call (even if ftruncate64() is available) call for the file descriptor with the given value,
1081 thus reducing the length of the file to the given length.
1082  
1083  
1084 Option: ftruncate64=value
1085  
1086 Type: OFF64
1087 Option group: REG
1088 Phase: LATE
1089 Platforms: all
1090  
1091 Invokes the ftruncate64() call if available, for the file descriptor with the given value,
1092 thus reducing the length of the file to the given length.
1093  
1094  
1095 Option: o-binary
1096 Aliases: binary, bin
1097  
1098 Type: BOOL
1099 Option group: FD
1100 Phase: OPEN
1101 Platforms: none; Cygwin
1102  
1103 Sets the O_BINARY flag with open() or fcntl() to avoid implicit line terminator conversions.
1104  
1105  
1106 Option: o-text
1107 Aliases: text
1108  
1109 Type: BOOL
1110 Option group: FD
1111 Phase: OPEN
1112 Platforms: none; Cygwin
1113  
1114 Sets the O_TEXT flag with open() or fcntl() to force implicit line terminator conversions.
1115  
1116  
1117 Option: o-noinherit
1118 Aliases: noinherit
1119  
1120 Type: BOOL
1121 Option group: FD
1122 Phase: OPEN
1123 Platforms: none; Cygwin
1124  
1125 Sets the O_NOINHERIT flag with open() or fcntl() to not keep this file open in a spawned process.
1126  
1127  
1128 Option: cool-write
1129 Aliases: coolwrite
1130  
1131 Type: BOOL
1132 Option group: FD
1133 Phase: INIT
1134 Platforms: all
1135  
1136 Takes it easy when write fails with EPIPE or ECONNRESET and logs the message
1137 with notice level instead of error.
1138 This prevents the log file from being filled with useless error messages
1139 when socat is used as a high volume server or proxy where clients often
1140 abort the connection.
1141 This option is experimental.
1142  
1143  
1144 Option: end-close
1145 Aliases: close
1146  
1147 Type: CONST
1148 Option group: FD
1149 Phase: INIT
1150 Platforms: all
1151  
1152 Changes the (address dependent) method to close a connection to just close
1153 the file descriptors. This is useful when the connection is to be reused by
1154 or shared with other processes.
1155 Normally, socket connections will be ended with shutdown(2) which
1156 terminates the socket even if it is shared by multiple processes.
1157 close(2) "unlinks" the socket from the process but keeps it active as
1158 long as there are still links from other processes.
1159 Similarly, when an address of type EXEC or SYSTEM is ended, socat usually
1160 will explicitely kill the sub process. With this option, it will just close
1161 the file descriptors.
1162  
1163  
1164 Option: user=value
1165 Aliases: owner=value, uid=value
1166  
1167 Type: UIDT (unsigned int or string)
1168 Option group: NAMED
1169 Phase: FD
1170 Platforms: all
1171  
1172 Takes one argument, a UNIX user name or a numeric user id. The first
1173 character of value is a digit for user ids.
1174 For NAMED addresses, if the file already exists, this option is applied via a
1175 chown() call, with fchown() for all other cases.
1176 If username is a name it must be a valid username from /etc/passwd and is
1177 converted to a user id with a getpwnam() call.
1178 On sane operating systems, the owner of the process must be root to change
1179 the owner of a file descriptor; root may even apply undefined (unnamed) user
1180 ids.
1181 My Linux 2.2 kernel SIGSEGVs the process in the fchown() call when this
1182 option is used with a (UNIX, unconnected or connected) socket or pipe. Linux
1183 2.4.0 handles this call correctly.
1184 TESTCASE: ./socat -d -d -d -d - tcp:loopback:21,user=root
1185  
1186  
1187 Option: user-late=value
1188 Aliases: uid-l=value
1189  
1190 Type: UIDT (unsigned int or string)
1191 Option group: FD
1192 Phase: LATE
1193 Platforms: all
1194  
1195 Takes one argument, a UNIX user name or a numeric user id. The first
1196 character of value is a digit for user ids.
1197 This option is applied via a fchown() call just before xioopen_single()
1198 terminates.
1199 If username is a name it must be a valid username from /etc/passwd and is
1200 converted to a user id with a getpwnam() call.
1201 On sane operating systems, the owner of the process must be root to change
1202 the owner of a file descriptor; root may even apply undefined (unnamed) user
1203 ids.
1204 My Linux 2.2 kernel SIGSEGVs the process in the fchown() call when this
1205 option is used with a socket or pipe.
1206  
1207  
1208 ===============================================================================
1209 OPEN group options
1210 Options of this group may be used with all addresses that support OPEN group
1211 options.
1212  
1213  
1214 Option: o-rdonly
1215 Aliases: rdonly
1216  
1217 Type: BOOL (inherent - no value)
1218 Option group: OPEN
1219 Phase: OPEN
1220 Platforms: all
1221  
1222 Use O_RDONLY with the open() call instead of the position dependend default.
1223 Take care not to block later write operations.
1224  
1225  
1226 Option: o-wronly
1227 Aliases: wronly
1228  
1229 Type: BOOL (inherent - no value)
1230 Option group: OPEN
1231 Phase: OPEN
1232 Platforms: all
1233  
1234 Use O_WRONLY with the open() call instead of the position dependend default.
1235 Take care not to block later write operations.
1236  
1237  
1238 Option: o-rdwr
1239 Aliases: rdwr
1240  
1241 Type: BOOL (inherent - no value)
1242 Option group: OPEN
1243 Phase: OPEN
1244 Platforms: all
1245  
1246 Use O_RDWR with the open() call instead of the position dependend default.
1247  
1248  
1249 Option: o-create
1250 Aliases: create, creat
1251  
1252 Type: BOOL
1253 Option group: OPEN
1254 Phase: OPEN
1255 Platforms: all
1256  
1257 Sets the O_CREAT flag of the open() call. This means that it is not an error if
1258 the file does not exist.
1259  
1260  
1261 Option: o-defer
1262 Aliases: defer
1263  
1264 Type: BOOL
1265 Option group: OPEN
1266 Phase: OPEN
1267 Platforms: none
1268  
1269 Sets the O_DEFER flag of the open() call. This means that write data is stored
1270 in paging space until an fsync() call.
1271  
1272  
1273 Option: o-delay
1274 Aliases: delay
1275  
1276 Type: BOOL
1277 Option group: OPEN
1278 Phase: OPEN
1279 Platforms: none
1280  
1281 Sets the O_DELAY flag of the open() call. This lets open block until the share
1282 conditions are fulfilled (see nshare, rshare)
1283  
1284  
1285 Option: o-direct
1286 Aliases: direct
1287  
1288 Type: BOOL
1289 Option group: OPEN
1290 Phase: OPEN
1291 Platforms: FreeBSD, HP-UX, Linux
1292  
1293 Sets the O_DIRECT flag of the open() call.
1294  
1295  
1296 Option: o-directory
1297 Aliases: directory
1298  
1299 Type: BOOL
1300 Option group: OPEN
1301 Phase: OPEN
1302 Platforms: Linux
1303  
1304 Sets the O_DIRECTORY flag of the open() call. This lets open fail if the given
1305 path is not a directory. This does not seem to be useful with socat.
1306  
1307  
1308 Option: o-dsync
1309 Aliases: dsync
1310  
1311 Type: BOOL
1312 Option group: OPEN
1313 Phase: OPEN
1314 Platforms: HP-UX, Linux, SunOS (UNIX98)
1315  
1316 Sets the O_DSYNC flag with the open() call. This lets write() calls wait until
1317 modification metainfo is physically written to media.
1318  
1319  
1320 Option: o-excl
1321 Aliases: excl
1322  
1323 Type: BOOL
1324 Option group: OPEN
1325 Phase: OPEN
1326 Platforms: all
1327  
1328 Sets the O_EXCL flag of the open() call.
1329  
1330  
1331 Option: o-largefile
1332 Aliases: largefile
1333  
1334 Type: BOOL
1335 Option group: OPEN
1336 Phase: OPEN
1337 Platforms: HP-UX, Linux, SunOS
1338  
1339 Sets the O_LARGEFILE flag of the open() flag.
1340  
1341  
1342 Option: o-noctty
1343 Aliases: noctty
1344  
1345 Type: BOOL
1346 Option group: OPEN
1347 Phase: OPEN
1348 Platforms: all
1349  
1350 Sets the O_NOCTTY flag of the open() call, so the opened device does not become
1351 the controlling tty of the process.
1352  
1353  
1354 Option: o-nofollow
1355 Aliases: nofollow
1356  
1357 Type: BOOL
1358 Option group: OPEN
1359 Phase: OPEN
1360 Platforms: FreeBSD, Linux
1361  
1362 Sets the O_NOFOLLOW flag of the open() call. This means that the last component
1363 of the open path must no be a symlink.
1364  
1365  
1366 Option: o-sync
1367 Aliases: sync
1368  
1369 Type: BOOL
1370 Option group: OPEN
1371 Phase: OPEN
1372 Platforms: all (UNIX98)
1373  
1374 Sets the O_SYNC flag with the open() call. This lets write() calls wait until
1375 data is physically written to media.
1376  
1377  
1378 Option: o-rshare
1379 Aliases: rshare
1380  
1381 Type: BOOL
1382 Option group: OPEN
1383 Phase: OPEN
1384 Platforms: none
1385  
1386 Sets the O_RSHARE flag of the open() call. This means that the file must not be
1387 opened for writing by other processes ("read sharing").
1388  
1389  
1390 Option: o-nshare
1391 Aliases: nshare
1392  
1393 Type: BOOL
1394 Option group: OPEN
1395 Phase: OPEN
1396 Platforms: none
1397  
1398 Sets the O_NSHARE flag of the open() call. This means that the file must not be
1399 shared with other processes ("no sharing").
1400  
1401  
1402 Option: o-rsync
1403 Aliases: rsync
1404  
1405 Type: BOOL
1406 Option group: OPEN
1407 Phase: OPEN
1408 Platforms: HP-UX, Linux, SunOS (UNIX98)
1409  
1410 Sets the O_RSYNC flag with the open() call. This lets write() calls wait until
1411 read metainfo is physically written to media.
1412  
1413  
1414 Option: o-priv
1415 Aliases: priv
1416  
1417 Type: BOOL
1418 Option group: OPEN
1419 Phase: OPEN
1420 Platforms: none (Solaris)
1421  
1422 Sets the O_PRIV flag with the open() call.
1423  
1424 ===============================================================================
1425 NAMED group options
1426 This group is valid for all addresses that refer to a file system entry like
1427 file, device, named pipe, or named UNIX domain socket.
1428  
1429  
1430 Option: unlink-early
1431 Aliases: new
1432  
1433 Type: BOOL
1434 Option group: NAMED
1435 Phase: EARLY
1436 Platforms: all
1437  
1438 This options tries to remove the filesystem entry given in the address before
1439 starting any other processing (even before user-early, perm-early, or
1440 group-early). unlink() is called; note that this call, in contrast to rm(1),
1441 removes entries regardless of their permissions. Instead, ownership or root
1442 privileges and write permissions in the directory are required and sufficient.
1443  
1444  
1445 Option: unlink
1446  
1447 Type: BOOL
1448 Option group: NAMED
1449 Phase: PREOPEN
1450 Platforms: all
1451  
1452 This options tries to remove the filesystem entry given in the address before
1453 it is tried to open, but past user-early, perm-early, or group-early).
1454 unlink() is called; note that this call, in contrast to rm(1), removes entries
1455 regardless of their permissions. Instead, ownership or root privileges and
1456 write permissions in the directory are required and sufficient.
1457  
1458  
1459 Option: unlink-late
1460  
1461 Type: BOOL
1462 Option group: NAMED
1463 Phase: PASTOPEN
1464 Platforms: all
1465  
1466 This option tries to remove the filesystem entry after it has been opened.
1467 Options can still be applied to the file descriptor, and
1468 the node or files data can be used, but it can no longer be accessed by other
1469 processes (except by tricks?), and after closing the stream the data or node is
1470 completely removed.
1471 unlink() is called; note that this call, in contrast to rm(1), removes entries
1472 regardless of their permissions. Instead, ownership or root privileges and
1473 write permissions in the directory are required and sufficient.
1474  
1475  
1476 Option: perm-early=value
1477  
1478 Type: MODET (mode_t)
1479 Option group: NAMED
1480 Phase: PREOPEN
1481 Platforms: all
1482  
1483 This option changes the mode (permissions) of an already existing filesystem
1484 entry with chmod() before the file is opened or after the UNIX domain socket is
1485 bound, but before it listens/connects.
1486  
1487  
1488 Option: user-early=value
1489 Aliases: uid-e=value
1490  
1491 Type: UIDT (unsigned int or string)
1492 Option group: NAMED
1493 Phase: PREOPEN
1494 Platforms: all
1495  
1496 Takes one argument, a UNIX user name or a numeric user id. The first
1497 character of value is a digit for user ids.
1498 This option is applied via a chown() call before the file system entry is
1499 opened or after the UNIX domain socket is bound, but before it starts to
1500 listen/connect.
1501 If username is a name it must be a valid username from /etc/passwd and is
1502 converted to a user id with a getpwnam() call.
1503 On sane operating systems, the owner of the process must be root to change
1504 the owner of a file descriptor; root may even apply undefined (unnamed) user
1505 ids.
1506  
1507  
1508 Option: group-early=value
1509 Aliases: gid-e=value
1510  
1511 Type: GIDT (unsigned int or string)
1512 Option group: NAMED
1513 Phase: PREOPEN
1514 Platforms: all
1515  
1516 Takes one argument, a UNIX group name or a numeric group id. The first
1517 character of value is a digit for group ids.
1518 This option is applied via a chown() call before the file system entry is
1519 opened or after the UNIX domain socket is bound, but before it
1520 listens/connects.
1521 If groupname is a name it must be a valid groupname from /etc/group and is
1522 converted to a group id with a getgrnam() call.
1523 On most modern operating systems, the owner of the process must be member of
1524 the group being set; only root may set any group, even numbers without group
1525 name.
1526  
1527  
1528 Option: umask=value
1529  
1530 Type: MODET
1531 Option group: NAMED
1532 Phase: EARLY
1533 Platforms: all
1534  
1535 Sets the umask before opening a file or creating a UNIX domain socket. This is
1536 especially useful for these sockets, because there interface does not provide a
1537 mode argument.
1538  
1539  
1540 Option: unlink-close
1541  
1542 Type: BOOL
1543 Option group: NAMED
1544 Phase: LATE
1545 Platforms: all
1546  
1547 Remove the addresses file system entry when closing the address.
1548 For named pipes, listening unix domain sockets, and the symbolic links of pty
1549 addresses, the default is 1; for created files, opened files, generic opened
1550 files, and client unix domain sockets the default is 0.
1551  
1552  
1553 ===============================================================================
1554 FORK and EXEC options
1555  
1556 Option: path=string
1557  
1558 Type: STRING
1559 Option group: EXEC
1560 Phase: PREEXEC
1561 Platforms: all
1562  
1563 Changes the PATH environment variable in the child process before the exec() or
1564 system() call.
1565  
1566  
1567 Option: nofork
1568  
1569 Type: BOOL
1570 Option group: FORK
1571 Phase: BIGEN
1572 Platforms: all
1573  
1574 Does not fork a subprocess for executing the program, instead calls execvp()
1575 directly from the actual socat instance. This avoids the overhead of another process
1576 between the program and the communication peer, but introduces lots of
1577 restrictions:
1578 * this option can only be applied to the second socat() address.
1579 * the first socat address cannot be OPENSSL or READLINE
1580 * socat options -b, -t, -D, -l, -v, -x, -t become useless
1581 * for both addresses, options ignoreeof, cr and crnl become useless
1582 * for the second address (the one with option nofork), options
1583 append, async, cloexec, flock, user, group, mode, nonblock,
1584 perm-late, setlk, and setpgid cannot be applied, and should be used on the
1585 first address instead.
1586  
1587  
1588 Option: pipes
1589  
1590 Type: BOOL
1591 Option group: FORK
1592 Phase: BIGEN
1593 Platforms: all
1594  
1595 For communication between the exec() or system() subprocess with socat, use two
1596 unnamed pipes instead of creating a socket pair.
1597  
1598  
1599 Option: pty
1600  
1601 Type: BOOL
1602 Option group: FORK
1603 Phase: BIGEN
1604 Platforms: all
1605  
1606 For communication between the exec() or system() subprocess with socat, use a
1607 pseudo terminal instead of a socket pair. The executed program gets the slave
1608 side, and socat the controlling side of the pseudo terminal.
1609 This is especially useful if you want to use, e.g., chat with socat (see
1610 EXAMPLES). Plus, ptys do not buffer I/O.
1611 Note: implementation of pseudo terminals are differing between platforms, so
1612 extra porting struggles might be required for porting this feature.
1613  
1614  
1615 Option: fdin=num
1616  
1617 Type: USHORT
1618 Option group: FORK
1619 Phase: PASTBIGEN
1620 Platforms: all
1621  
1622 After forking the child process, assign the stream where the child
1623 receives data from socat, to file descriptor num instead of stdin.
1624  
1625  
1626 Option: fdout=num
1627  
1628 Type: USHORT
1629 Option group: FORK
1630 Phase: PASTBIGEN
1631 Platforms: all
1632  
1633 After forking the child process, assign the stream where the child
1634 writes data to socat, to file descriptor num instead of stdout.
1635  
1636  
1637 Option: stderr
1638  
1639 Type: BOOL
1640 Option group: FORK
1641 Phase: PASTFORK
1642 Platforms: all
1643  
1644 Normally, the stderr filedescriptor of the forked program is a clone of socat's
1645 stderr fd. If this option is used, the programs stderr filedescriptor is a copy
1646 of the "normal" data output of the program, i.e. of its stdout or fdout.
1647  
1648  
1649 Option: setsid
1650 Aliases: sid
1651  
1652 Type: BOOL
1653 Option group: PROCESS
1654 Phase: LATE
1655 Platforms: all
1656  
1657 Invokes setsid() to make the forked off subprocess the leader of a new
1658 session. This also generates a new process group with this process as leader.
1659 This is useful, e.g., when exec'ing ssh to get the password prompt into the I/O
1660 channel (see EXAMPLES)
1661  
1662  
1663 Option: setpgid
1664 Aliases: pgid
1665  
1666 Type: INT
1667 Option group: FORK
1668 Phase: LATE
1669 Platforms: all
1670  
1671 Invokes setpgid(0, val) from the child process.
1672  
1673  
1674 Option: tiocsctty
1675 Aliases: ctty
1676  
1677 Type: BOOL
1678 Option group: TERMIOS
1679 Phase: LATE2
1680 Platforms: all
1681  
1682 Applies only in combination with the pty option or its variants. Tries to make
1683 the pty the controlling terminal. May require option setsid to work correctly.
1684  
1685  
1686 Option: dash
1687 Aliases: login
1688  
1689 Type: BOOL
1690 Option group: EXEC
1691 Phase: PREEXEC
1692 Platforms: all
1693  
1694 Prefixes argv[0] for the execvp() call with '-', thus making a shell behave as
1695 login shell.
1696  
1697  
1698 Option: sighup
1699  
1700 Type: CONST
1701 Option group: PARENT
1702 Phase: LATE
1703 Platforms: all
1704  
1705 Has socat pass an eventual SIGHUP signal to the sub process.
1706 If no address has this option, socat terminates on SIGHUP.
1707  
1708  
1709 Option: sigint
1710  
1711 Type: CONST
1712 Option group: PARENT
1713 Phase: LATE
1714 Platforms: all
1715  
1716 Has socat pass an eventual SIGINT signal to the sub process.
1717 If no address has this option, socat terminates on SIGINT.
1718  
1719  
1720 Option: sigquit
1721  
1722 Type: CONST
1723 Option group: PARENT
1724 Phase: LATE
1725 Platforms: all
1726  
1727 Has socat pass an eventual SIGQUIT signal to the sub process.
1728 If no address has this option, socat dumps core and terminates on SIGQUIT.
1729  
1730  
1731 ===============================================================================
1732 PTY options
1733 These options may be used with addresses that create a pseudo terminal (pty).
1734 In particular, these are addresses EXEC, SYSTEM, and PTY.
1735  
1736  
1737 Option: openpty
1738  
1739 Type: BOOL
1740 Option group: PTY
1741 Phase: BIGEN
1742 Platforms: FreeBSD, Linux
1743  
1744 Like pty, but only use the openpty mechanism, not any other way for pty
1745 generation.
1746  
1747  
1748 Option: ptmx
1749  
1750 Type: BOOL
1751 Option group: PTY
1752 Phase: BIGEN
1753 Platforms: HP-UX, Linux, SunOS
1754  
1755 Like pty, but only use the /dev/ptmx (/dev/ptc on AIX) mechanism, not any other
1756 way for pty generation.
1757  
1758  
1759 Option: symbolic-link=filename
1760  
1761 Type: FILENAME
1762 Option group: PTY
1763 Phase: LATE
1764 Platforms: all
1765  
1766 Generates a symbolic link that points to the actual pseudo terminal (pty). This
1767 might help to solve the problem that ptys are generated with more or less
1768 unpredictable names, making it difficult to directly access the socat generated
1769 pty automatically. With this option, the user can specify a "fix" point in the
1770 file hierarchy that helps him to access the actual pty.
1771  
1772  
1773 Option: pty-wait-slave
1774 Aliases: wait-slave, waitslave
1775  
1776 Type: BOOL
1777 Option group: PTY
1778 Phase: EARLY
1779 Platforms: all
1780  
1781 Blocks the open phase until a process opens the slave side of the pty.
1782 Usually, socat continues after generating the pty with opening the next
1783 address or with entering the transfer engine. With the wait-slave option,
1784 socat waits until some process opens the slave side of the pty before
1785 continuing.
1786 This option only works if the operating system provides the tt(poll())
1787 system call. And it depends on an undocumented behaviour of pty's, so it
1788 does not work on all operating systems. It has successfully been tested on
1789 Linux, FreeBSD, NetBSD, and on Tru64 with openpty.
1790  
1791  
1792 Option: pty-interval
1793  
1794 Type: TIMESPEC
1795 Option group: PTY
1796 Phase: EARLY
1797 Platforms: all
1798  
1799 When the wait-slave option is set, socat periodically checks the HUP
1800 condition using poll() to find if the pty's slave side has been
1801 opened. The default
1802 polling interval is 1s. Use the pty-interval option to change this value.
1803  
1804  
1805 ===============================================================================
1806 SOCKET options
1807 These are options that may be applied to all socket type addresses: UNIX
1808 (LOCAL) domain sockets (even with EXEC type addresses if not pipes), IP, and
1809 IPv6.
1810  
1811  
1812 Option: so-debug
1813 Aliases: debug
1814  
1815 Logical type: bool
1816 Physical type: INT
1817 Option group: SOCKET
1818 Phase: PASTSOCKET
1819 Platforms: all (UNIX98)
1820  
1821 Sets the SO_DEBUG socket option. Requires root.
1822  
1823  
1824 Option: so-acceptconn
1825 Aliases: acceptconn
1826  
1827 Logical type: bool
1828 Physical type: INT
1829 Option group: SOCKET
1830 Phase: PASTSOCKET
1831 Platforms: all (UNIX98)
1832  
1833 Tries to set the SO_ACCEPTCONN socket option. Read-only!
1834  
1835  
1836 Option: so-broadcast
1837 Aliases: broadcast
1838  
1839 Logical type: bool
1840 Physical type: INT
1841 Option group: SOCKET
1842 Phase: PASTSOCKET
1843 Platforms: all (UNIX98)
1844  
1845 Sets the SO_BROADCAST socket option.
1846  
1847  
1848 Option: so-reuseaddr
1849 Aliases: reuseaddr
1850  
1851 Logical type: bool
1852 Physical type: INT
1853 Option group: SOCKET
1854 Phase: PASTSOCKET
1855 Platforms: all (UNIX98)
1856  
1857 Sets the SO_REUSEADDR socket option. Allows to bind to a port even if this
1858 port is already used for a connection.
1859  
1860  
1861 Option: so-keepalive
1862 Aliases: keepalive
1863  
1864 Logical type: bool
1865 Physical type: INT
1866 Option group: SOCKET
1867 Phase: FD
1868 Platforms: all (UNIX98)
1869  
1870 Sets the SO_KEEPALIVE socket option.
1871  
1872  
1873 Option: so-linger=value
1874 Aliases: linger=value
1875  
1876 Type: LINGER
1877 Option group: SOCKET
1878 Phase: PASTSOCKET
1879 Platforms: all (UNIX98)
1880  
1881 Activates the SO_LINGER option and sets a value (seconds) for it.
1882 This lets shutdown() or close() block until data transfers have finished or the
1883 given value timed out.
1884 Note: on some systems, the type for setsockopt() is struct { int; int; }
1885 In this case, xioopen() sets {1,value}.
1886  
1887  
1888 Option: so-oobinline
1889 Aliases: oobinline
1890  
1891 Logical type: bool
1892 Physical type: INT
1893 Option group: SOCKET
1894 Phase: PASTSOCKET
1895 Platforms: all (UNIX98)
1896  
1897 Sets the SO_OOBINLINE socket option.
1898  
1899  
1900 Option: so-sndbuf=value
1901 Aliases: sndbuf=value
1902  
1903 Type: INT
1904 Option group: SOCKET
1905 Phase: PASTSOCKET
1906 Platforms: all (UNIX98)
1907  
1908 Sets the SO_SNDBUF option of the socket to the given value. This option is
1909 applied after the socket() (or socketpair()) call.
1910 NOTE: The kernel might change the effective value:
1911 My Linux 2.2 with TCP doubles the value, but uses at least 2048.
1912  
1913  
1914 Option: so-sndbuf-late=value
1915 Aliases: sndbuf-late=value
1916  
1917 Type: INT
1918 Option group: SOCKET
1919 Phase: LATE
1920 Platforms: all (UNIX98)
1921  
1922 Sets the SO_SNDBUF option of the socket to the given value. This option is
1923 applied after the connect() or accept() (or socketpair) call.
1924 NOTE: The kernel might change the effective value:
1925 My Linux 2.2 with TCP doubles the value, but uses at least 2048, and a
1926 maximum of 131070 (system limit?).
1927  
1928  
1929 Option: so-rcvbuf=value
1930 Aliases: rcvbuf=value
1931  
1932 Type: INT
1933 Option group: SOCKET
1934 Phase: PASTSOCKET
1935 Platforms: all (UNIX98)
1936  
1937 Sets the SO_RCVBUF option of the socket to the given value. This option is
1938 applied after the socket() call.
1939 NOTE: The kernel might change the effective value:
1940 My Linux 2.2 with TCP connect doubles the value, but uses at least 256 and
1941 at most 131070.
1942 My Linux 2.2 with TCP listen doubles the value but uses at least 11772.
1943 NOTE: For applying the SO_RCVBUF options after the connect() or accept() calls
1944 see rcvbuf-late.
1945  
1946  
1947 Option: so-rcvbuf-late=value
1948 Aliases: rcvbuf-late=value
1949  
1950 Type: INT
1951 Option group: SOCKET
1952 Phase: LATE
1953 Platforms: all (UNIX98)
1954  
1955 Sets the SO_RCVBUF option of the socket to the given value. This option is
1956 applied after the connect() or listen() call.
1957 NOTE: The kernel might change the effective value:
1958 My Linux 2.2 with TCP doubles the value, but uses at least 256 and maximal
1959 131070.
1960 NOTE: sequence of this call may be relevant for the effecting value (AIX
1961 4.3.3). For applying the SO_RCVBUF option immediately after the socket() call
1962 see rcvbuf.
1963  
1964  
1965 Option: so-error
1966 Aliases: error
1967  
1968 Logical type: bool
1969 Physical type: INT
1970 Option group: SOCKET
1971 Phase: PASTSOCKET
1972 Platforms: all (UNIX98)
1973  
1974 Tries to set the SO_ERROR socket option which is a read-only option.
1975 On my Linux 2.2 it gives "protocol not available".
1976  
1977  
1978 Option: so-type=value
1979 Aliases: type=value
1980  
1981 Type: INT
1982 Option group: SOCKET
1983 Phase: PASTSOCKET
1984 Platforms: all
1985  
1986 Set the sockettype argument of the socket() or socketpair() call. This
1987 overrides the per
1988 protocol default (e.g., TCP: SOCK_STREAM). Most values might
1989 not be supported by a given protocol.
1990 The following combinations are known to work at least under one OS:
1991 TCP SOCK_STREAM (system default)
1992 UDP SOCK_DGRAM (system default)
1993 IP SOCK_RAW (socat default)
1994 UNIX SOCK_STREAM (system default)
1995 UNIX SOCK_DGRAM
1996  
1997  
1998 Option: so-dontroute
1999 Aliases: dontroute
2000  
2001 Logical type: bool
2002 Physical type: INT
2003 Option group: SOCKET
2004 Phase: PASTSOCKET
2005 Platforms: all (UNIX98)
2006  
2007 Sets the SO_DONTROUTE socket option.
2008  
2009  
2010 Option: so-rcvlowat=value
2011 Aliases: rcvlowat=value
2012  
2013 Type: INT
2014 Option group: SOCKET
2015 Phase: PASTSOCKET
2016 Platforms: all (UNIX98)
2017  
2018 Sets the SO_RCVLOWAT socket option. Cannot be changed in Linux (always
2019 gives "protocol not available").
2020  
2021  
2022 Option: so-rcvtimeo=value
2023 Aliases: rcvtimeo=value
2024  
2025 Provided type: double
2026 Physical type: TIMEVAL (long[2])
2027 Option group: SOCKET
2028 Phase: PASTSOCKET
2029 Platforms: all (UNIX98)
2030  
2031 Sets the SO_RCVTIMOE socket option. Cannot be changed in Linux (always
2032 gives "protocol not available").
2033  
2034  
2035 Option: so-sndlowat=value
2036 Aliases: sndlowat=value
2037  
2038 Type: INT
2039 Option group: SOCKET
2040 Phase: PASTSOCKET
2041 Platforms: all (UNIX98)
2042  
2043 Sets the SO_SNDLOWAT socket option. Cannot be changed in Linux (always
2044 gives "protocol not available").
2045  
2046  
2047 Option: so-sndtimeo=value
2048 Aliases: sndtimeo=value
2049  
2050 Provided type: double
2051 Physical type: TIMEVAL (long[2])
2052 Option group: SOCKET
2053 Phase: PASTSOCKET
2054 Platforms: all (UNIX98)
2055  
2056 Sets the SO_SNDTIMEO socket option. Cannot be changed in Linux (always
2057 gives "protocol not available").
2058  
2059  
2060 Option: so-audit
2061 Aliases: audit
2062  
2063 Type: INT
2064 Option group: SOCKET
2065 Phase: PASTSOCKET
2066 Platforms: none
2067  
2068 Sets the SO_AUDIT socket option.
2069  
2070  
2071 Option: so-attach-filter
2072 Aliases: attach-filter, attachfilter
2073  
2074 Type: INT
2075 Option group: SOCKET
2076 Phase: PASTSOCKET
2077 Platforms: Linux
2078  
2079 Linux docu recommends to use libpcap for this feature.
2080 "protocol not available", need kernel CONFIG_FILTER!
2081  
2082  
2083 Option: so-detach-filter
2084 Aliases: detach-filter, detachfilter
2085  
2086 Type: INT
2087 Option group: SOCKET
2088 Phase: PASTSOCKET
2089 Platforms: Linux
2090  
2091 See Linux "man 7 socket".
2092 "protocol not available", need kernel CONFIG_FILTER!
2093  
2094  
2095 Option: so-bindtodevice=string
2096 Aliases: bindtodevice, interface, if
2097  
2098 Type: NAME
2099 Option group: SOCKET
2100 Phase: PASTSOCKET
2101 Platforms: Linux
2102  
2103 Binds the socket to a net interface, e.g. lo0 or eth0 (interface names depend
2104 on operating system). Might require root privilege.
2105  
2106  
2107 Option: so-bsdcompat
2108 Aliases: bsdcompat
2109  
2110 Logical type: bool
2111 Physical type: INT
2112 Option group: SOCKET
2113 Phase: PASTSOCKET
2114 Platforms: none
2115  
2116 Sets the SO_BSDCOMPAT socket option. See Linux "man 7 socket".
2117  
2118  
2119 Option: so-cksumrecv
2120 Aliases: cksumrecv
2121  
2122 Logical type: bool
2123 Physical type: INT
2124 Option group: SOCKET
2125 Phase: PASTSOCKET
2126 Platforms: none
2127  
2128 Sets the SO_CKSUMRECV socket option.
2129  
2130  
2131 Option: so-kernaccept
2132 Aliases: kernaccept
2133  
2134 Logical type: bool
2135 Physical type: INT
2136 Option group: SOCKET
2137 Phase: PASTSOCKET
2138 Platforms: none
2139  
2140 Sets the SO_KERNACCEPT socket option.
2141  
2142  
2143 Option: so-no-check
2144 Aliases: no-check, nocheck
2145  
2146 Logical type: bool
2147 Physical type: INT
2148 Option group: SOCKET
2149 Phase: PASTSOCKET
2150 Platforms: Linux
2151  
2152 Sets the SO_NO_CHECK socket option." Intentionally undocumented" under
2153 Linux (see "man 7 socket"), don't know what it does....
2154  
2155  
2156 Option: so-noreuseaddr
2157 Aliases: noreuseaddr
2158  
2159 Type: INT?
2160 Option group: SOCKET
2161 Phase: PASTSOCKET
2162 Platforms: none
2163  
2164 Sets the SO_NOREUSEADDR socket option.
2165  
2166  
2167 Option: passcred
2168 Aliases: so-passcred
2169  
2170 Type: INT
2171 Option group: SOCKET
2172 Phase: PASTSOCKET
2173 Platforms: Linux
2174  
2175 Sets the SO_PASSCRED option of a socket.
2176  
2177  
2178 Option: so-peercred
2179 Aliases: peercred
2180  
2181 Type: INT3 or int[3]?
2182 Option group: SOCKET
2183 Phase: PASTSOCKET
2184 Platforms: Linux
2185  
2186 Enables receiving of credentials. Read only.
2187 Not really implemented yet.
2188 Nevertheless, Gives "Protocol not available".
2189  
2190  
2191 Option: so-priority=value
2192 Aliases: priority=value
2193  
2194 Type: INT
2195 Option group: SOCKET
2196 Phase: PASTSOCKET
2197 Platforms: Linux
2198  
2199 Sets the protocol defined priority for all packets to be sent on this socket.
2200 Docu says it requires root privileges. Normal user may set 0..6 for UNIX domain
2201 and TCP client sockets on Linux 2.2. root may send any int value.
2202  
2203  
2204 Option: so-reuseport
2205 Aliases: reuseport
2206  
2207 Type: INT?
2208 Option group: SOCKET
2209 Phase: PASTSOCKET
2210 Platforms: FreeBSD, HP-UX
2211  
2212 Sets the SO_REUSEPORT socket option.
2213  
2214  
2215 Option: so-security-authentication
2216 Aliases: security-authentication, securityauthentication
2217  
2218 Type: INT?
2219 Option group: SOCKET
2220 Phase: PASTSOCKET
2221 Platforms: Linux
2222  
2223 Sets the SO_SECURITY_AUTHENTICATION socket option. Gives "protocol not
2224 available" error.
2225 In Linux 2.2.16 source, only exists in asm-*/socket.h
2226  
2227  
2228 Option: so-security-encryption-network
2229 Aliases: security-encryption-network, securityencryptionnetwork
2230  
2231 Type: INT?
2232 Option group: SOCKET
2233 Phase: PASTSOCKET
2234 Platforms: Linux
2235  
2236 Sets the SO_SECURITY_ENCRYPTION_NETWORK option of the socket. Gives "protocol
2237 not available" error.
2238 In Linux 2.2.16 source, only exists in asm-*/socket.h
2239  
2240  
2241 Option: so-security-encryption-transport
2242 Aliases: security-encryption-transport, securityencryptiontransport
2243  
2244 Type: INT?
2245 Option group: SOCKET
2246 Phase: PASTSOCKET
2247 Platforms: Linux
2248  
2249 Sets the SO_SECURITY_ENCRYPTION_TRANSPORT option of the socket. Gives "protocol
2250 not available" error.
2251 In Linux 2.2.16 source, only exists in asm-*/socket.h
2252  
2253  
2254 Option: so-use-ifbufs
2255 Aliases: use-ifbufs, useifbufs
2256  
2257 Type: INT?
2258 Option group: SOCKET
2259 Phase: PASTSOCKET
2260 Platforms: none
2261  
2262 Sets the SO_USE_IFBUFS socket option.
2263  
2264  
2265 Option: so-useloopback
2266 Aliases: useloopback
2267  
2268 Type: INT?
2269 Option group: SOCKET
2270 Phase: PASTSOCKET
2271 Platforms: FreeBSD, HP-UX, SunOS
2272  
2273 Sets the SO_USELOOPBACK socket option.
2274  
2275  
2276 Option: so-dgram-errind
2277 Aliases: dgram-errind, dgramerrind
2278  
2279 Logical type: bool?
2280 Physical type: INT?
2281 Option group: SOCKET
2282 Phase: PASTSOCKET
2283 Platforms: SunOS
2284  
2285 Sets the SO_DGRAM_ERRIND flag.
2286  
2287  
2288 Option: so-dontlinger
2289 Aliases: dontlinger
2290  
2291 Type: INT?
2292 Option group: SOCKET
2293 Phase: PASTSOCKET
2294 Platforms: SunOS
2295  
2296 Sets the SO_DONTLINGER socket option.
2297  
2298  
2299 Option: so-prototype
2300 Aliases: prototype
2301  
2302 Type: INT?
2303 Option group: SOCKET
2304 Phase: PASTSOCKET
2305 Platforms: HP-UX, SunOS
2306  
2307 Sets the SO_PROTOTYPE socket option.
2308  
2309  
2310 Option: type
2311  
2312 Type: INT
2313 Option group: SOCKET
2314 Phase: PASTSOCKET
2315 Platforms: all
2316  
2317 Sets the type of the socket, usually as argument to the socket() or
2318 socketpair() call, to <type>. Under Linux, 1 means stream oriented socket, 2
2319 means datagram socket, and 3 means raw socket.
2320  
2321  
2322 Option: protocol-family
2323 Aliases: pf
2324  
2325 Type: STRING
2326 Option group: SOCKET
2327 Phase: PRESOCKET
2328 Platforms: all
2329  
2330 Forces the use of the specified IP version. <string> can be something like
2331 "ip4" or "ip6".
2332  
2333  
2334 Option: fiosetown
2335  
2336 Logical type: bool
2337 Physical type: INT
2338 Option group: SOCKET
2339 Phase: PASTSOCKET
2340 Platforms: FreeBSD, Linux
2341  
2342 Sets the FIOSETOWN ioctl (in "man 7 socket" called FIOCSETOWN).
2343  
2344  
2345 #Option: ciocspgrp
2346 #
2347 #Allowed in addresses: SOCKET
2348 #Logical type: bool
2349 #Physical type: int
2350 #
2351 #Sets the CIOCSPGRP ioctl.
2352  
2353  
2354 #Option: addr=value
2355 #
2356 #Allowed in addresses: SOCKET
2357 #Type: socket-address
2358 #
2359 #For client socket, sets the local (bind) address. Not yet implemented.
2360  
2361  
2362 Option: bind=socketaddress
2363  
2364 Type: STRING
2365 Option group: SOCKET
2366 Phase: BIND
2367 Platforms: all
2368  
2369 Gives the address to be used in the bind(2) system call. The format of the
2370 socketaddress depends on the socket type (see below). For "client" sockets this
2371 option inserts a bind(2) call between socket(2) and connect(2) calls. For
2372 "server" sockets this option is ignored! For datagram sockets behaviour of this
2373 option is currently unspecified.
2374 Note: for client sockets in the UNIX domain this option is not useful: with the
2375 same address as connect it will conflict with the bind call of the server
2376 socket; another address for bind is ignored (with Linux 2.2).
2377 For TCP sockets these formats are currently implemented:
2378 HOSTNAME
2379 HOSTNAME:PORT
2380 IPADDR
2381 IPADDR:PORT
2382 :PORT
2383 .PORT
2384  
2385  
2386 Option: connect-timeout=seconds
2387  
2388 Type: TIMEVAL
2389 Option group: SOCKET
2390 Phase: PASTSOCKET
2391 Platforms: all
2392  
2393 Abort the connection attempt after the given time with error status.
2394  
2395 #
2396 Option: backlog=value
2397  
2398 Type: INT
2399 Option group: LISTEN
2400 Phase: LISTEN
2401 Platforms: all
2402  
2403 Sets the value to be used with the listen(2) system call. The default is 5.
2404 It does not seem to work for Linux 2.2; Linux seems to allow much more
2405 established connections, but then they stay even after server process
2406 shutdown...
2407  
2408  
2409 Option: range=address:mask, range=address/bits
2410  
2411 Type: STRING
2412 Option group: RANGE
2413 Phase: ACCEPT
2414 Platforms: all
2415 Implementation status: only for INET (IP4) addresses
2416  
2417 Defines a subnet where clients may connect from. If other clients connect the
2418 accepted connection is shut down immediately after examination of the client
2419 address. If this option is not used, the default is 0.0.0.0:0.0.0.0, allowing
2420 arbitrary client addresses. bits is the number of high order bits that must
2421 match between the range value and the clients address.
2422  
2423  
2424 Option: tcpwrap, tcpwrap=name
2425  
2426 Type: STRING_NULL
2427 Option group: RANGE
2428 Phase: ACCEPT
2429 Platforms: (depends on libwrap installation)
2430  
2431 Uses the rules introduced by Wietse Venema's libwrap (tcpd) library to check
2432 if the client is allowed to connect. The configuration files are
2433 /etc/hosts.allow and /etc/hosts.deny. See "man 5 hosts_access" for
2434 more information. <name> is passed to the wrapper functions as daemon
2435 process name. If omitted, the basename of socats invokation (argv[0]) is
2436 passed.
2437 If both tcpwrap and and range options are applied to an address, both
2438 conditions must be fulfilled to allow the connection.
2439  
2440  
2441 Option: hosts-allow, tcpwrap-hosts-allow-table
2442  
2443 Type: FILENAME
2444 Option group: RANGE
2445 Phase: ACCEPT
2446 Platforms: (depends on libwrap installation)
2447  
2448 Takes the specified file instead of /etc/hosts.allow.
2449  
2450  
2451 Option: hosts-deny, tcpwrap-hosts-deny-table
2452  
2453 Type: FILENAME
2454 Option group: RANGE
2455 Phase: ACCEPT
2456 Platforms: (depends on libwrap installation)
2457  
2458 Takes the specified file instead of /etc/hosts.deny.
2459  
2460  
2461 Option: tcpwrap-etc, tcpwrap-dir
2462  
2463 Type: FILENAME
2464 Option group: RANGE
2465 Phase: ACCEPT
2466 Platforms: (depends on libwrap installation)
2467  
2468 Looks for hosts.allow and hosts.deny in the specified directory. Is
2469 overriden by options hosts-allow and hosts-deny.
2470  
2471  
2472 -------------------------------------------------------------------------------
2473 IP options
2474  
2475  
2476 Option: ip-options=values
2477 Aliases: ipoptions
2478  
2479 Type: BIN
2480 Option group: SOCK_IP
2481 Phase: PASTSOCKET
2482 Platforms: all
2483  
2484 Sets the IP_OPTIONS values of the IP socket. For example, to send packets to
2485 destination D.D.D.D via a router G.G.G.G you have to specify G.G.G.G as the
2486 "normal" destination, and D.D.D.D in the source route:
2487 TCP:G.G.G.G:25,ip-options=x890704dddddddd
2488 Note that the destination will see G.G.G.G as sender of the packets, and
2489 therefore might not return the answers correctly.
2490 See RFC791 for detailed specification of IP option fields.
2491 Examples:
2492 x01 ... nop
2493 x8307040a000001 ... loose source route
2494 x890b040a000001c0c1c2c3 ... strict source route
2495 Note: with source routes, you should not specifiy destination address and
2496 hops as defined in RFC791 (first hop as IP header destination address,
2497 further hops and final destination in source route) because the (Linux?) kernel changes
2498 them to a more intuitive form (final destination as destination in IP header,
2499 gateways in source route). So, in destination address give the final
2500 destination, and in the source route the gateways!
2501 Note: this option may be mulitply applied per socket but the (Linux?) kernel
2502 pads each setting with 0' to align the options end to 4 octets. So you should
2503 better pad the options data with nops (01) yourself.
2504  
2505  
2506 Option: ip-pktinfo
2507 Aliases: ippktinfo, pktinfo
2508  
2509 Type: INT (should be struct in_pktinfo)
2510 Option group: SOCK_IP
2511 Phase: PASTSOCKET
2512 Platforms: Linux
2513 Status: Not completely implemented (ancillary messages are not supported by
2514 socat/xio)
2515  
2516 Pass an IP_PKTINFO ancillary message.
2517  
2518  
2519 Option: ip-recvtos
2520 Aliases: iprecvtos, recvtos
2521  
2522 Logical type: bool
2523 Physical type: INT
2524 Option group: SOCK_IP
2525 Phase: PASTSOCKET
2526 Platforms: Linux
2527 Status: Not completely implemented (ancillary messages are not supported by
2528 socat/xio)
2529  
2530 Set the IP_RECVTOS socket option which enables IP_TOS ancillary message
2531 passing.
2532  
2533  
2534 Option: ip-recvttl
2535 Aliases: iprecvttl, recvttl
2536  
2537 Logical type: bool
2538 Physical type: INT
2539 Option group: SOCK_IP
2540 Phase: PASTSOCKET
2541 Platforms: all
2542 Implementation status: No results.
2543  
2544 Set the IP_RECVTTL socket option.
2545  
2546  
2547 Option: ip-recvopts
2548 Aliases: iprecvopts, recvopts
2549  
2550 Logical type: bool
2551 Physical type: INT
2552 Option group: SOCK_IP
2553 Phase: PASTSOCKET
2554 Platforms: all
2555 Implementation status: No results.
2556  
2557 Set the IP_RECVOPTS socket option.
2558  
2559  
2560 Option: ip-retopts
2561 Aliases: ipretopts, retopts
2562  
2563 Logical type: bool
2564 Physical type: INT
2565 Option group: SOCK_IP
2566 Phase: PASTSOCKET
2567 Platforms: all
2568 Implementation status: No results.
2569  
2570 Set the IP_RETOPTS socket option.
2571  
2572  
2573 Option: ip-tos=value
2574 Aliases: iptos=value, tos=value
2575  
2576 Logical type: byte
2577 Physical type: INT
2578 Option group: SOCK_IP
2579 Phase: PASTSOCKET
2580 Platforms: all
2581  
2582 Sets the TOS (type of service) flags for the outgoing IP headers of the
2583 socket. My Linux 2.2 does not allow to set values other than 0 (probably
2584 needs some optional kernel features).
2585  
2586  
2587 Option: ip-ttl=value
2588 Aliases: ipttl=value, ttl=value
2589  
2590 Logical type: byte
2591 Physical type: INT
2592 Option group: SOCK_IP
2593 Phase: PASTSOCKET
2594 Platforms: all
2595  
2596 Sets the TTL (time to live) field for the outgoing IP headers of the socket.
2597  
2598 This option can be used to implement a "poor mans traceroute" in conjunction
2599 with tcpdump.
2600  
2601  
2602 Option: ip-hdrincl
2603 Aliases: iphdrincl, hdrincl
2604  
2605 Logical type: bool
2606 Physical type: INT
2607 Option group: SOCK_IP
2608 Phase: PASTSOCKET
2609 Platforms: all
2610  
2611 Set the IP_HDRINCL socket option. User will supply IP header before user
2612 data. For raw IP sockets only. Not tested.
2613  
2614  
2615 Option: ip-recverr
2616 Aliases: iprecverr, recverr
2617  
2618 Type: INT
2619 Option group: SOCK_IP
2620 Phase: PASTSOCKET
2621 Platforms: Linux
2622  
2623 Set the IP_RECVERR socket option.
2624 Implementation status: No results.
2625  
2626  
2627 Option: ip-mtu-discover=value
2628 Aliases: ipmtudiscover=value, mtudiscover=value
2629  
2630 Type: INT (0..2)
2631 Option group: SOCK_IP
2632 Phase: PASTSOCKET
2633 Platforms: Linux
2634  
2635 Sets the IP_MTU_DISCOVER flag of the IP socket. In Linux there are three values
2636 defined: 0..dont(never), 1..want(per route), 2..do(always)
2637  
2638  
2639 Option: ip-mtu
2640 Aliases: ipmtu, mtu
2641  
2642 Type: INT
2643 Option group: SOCK_IP
2644 Phase: PASTSOCKET
2645 Platforms: none
2646  
2647 Sets the MTU (maximal transfer unit) of the socket. In Linux this is a
2648 read-only parameter and results in a "protocol not available" error.
2649  
2650  
2651 Option: ip-freebind
2652 Aliases: ipfreebind, freebind
2653  
2654 Logical type: bool
2655 Physical type: INT
2656 Option group: SOCK_IP
2657 Phase: PASTSOCKET
2658 Platforms: none
2659  
2660 Allows the socket to locally bind to any address, even those that are
2661 not covered by an interface address, alias address or a local subnet. Even
2662 broadcast and multicast addresses are possible.
2663 Note: this option has been found on Linux 2.4 in <linux/in.h>. This file might
2664 not be included per default, because it creates errors.
2665 To make this option available, "make" socat with the CCOPT environment
2666 variable set to "-DIP_FREEBIND=15"
2667  
2668  
2669 Option: ip-router-alert=value
2670 Aliases: iprouteralert, routeralert
2671  
2672 Type: INT
2673 Option group: SOCK_IP
2674 Phase: PASTSOCKET
2675 Platforms: Linux
2676  
2677 Sets the IP_ROUTER_ALERT socket option. Only works with raw sockets.
2678 "Invalid argument"
2679  
2680  
2681 Option: ip-add-membership=multicast-address:interface-address
2682 ip-add-membership=multicast-address:interface-name
2683 ip-add-membership=multicast-address:interface-index
2684 ip-add-membership=multicast-address:interface-address:interface-name
2685 ip-add-membership=multicast-address:interface-address:interface-index
2686 Aliases: add-membership
2687 ip-membership
2688  
2689 Type: IP_MREQN
2690 Option group: SOCK_IP
2691 Phase: PASTSOCKET
2692 Platforms: all
2693  
2694 Makes the socket member of the specified multicast group. This is currently
2695 only implemented for IPv4. The option takes the IP address of the multicast
2696 group and info about the desired network interface. The most common syntax
2697 is the first one, while the others are only available on systems that
2698 provide tt(struct mreqn) (Linux).nl()
2699 The indices of active network interfaces can be shown using the utility
2700 procan().
2701  
2702  
2703 Option: ip-drop-membership
2704  
2705 Not implemented.
2706  
2707  
2708 #! Option: ipv6-join-group
2709  
2710  
2711 Option: ip-multicast-ttl=byte
2712 Aliases: ipmulticastttl, multicastttl
2713  
2714 Type: BYTE
2715 Option group: SOCK_IP
2716 Phase: PASTSOCKET
2717 Platforms: all
2718  
2719 Sets the TTL used for outgoing multicast traffic. Default is 1.
2720  
2721  
2722 Option: ip-multicast-loop
2723 Aliases: ipmulticastloop, multicastloop
2724  
2725 Logical type: bool
2726 Physical type: INT
2727 Option group: SOCK_IP
2728 Phase: PASTSOCKET
2729 Platforms: all
2730  
2731 Specifies if outgoing multicast traffic should loop back to the interface.
2732  
2733  
2734 Option: ip-multicast-if=hostname
2735 Aliases: multicast-if
2736  
2737 Type: IP4NAME
2738 Option group: SOCK_IP
2739 Phase: PASTSOCKET
2740 Platforms: all
2741  
2742 Specifies hostname or address of the network interface to be used for
2743 multicast traffic.
2744  
2745  
2746 Option: ip-pktoptions
2747 Aliases: ippktoptions, pktoptions, pktopts
2748  
2749 Type: INT?
2750 Option group: SOCK_IP
2751 Phase: PASTSOCKET
2752 Platforms: Linux
2753  
2754 Set the IP_PKTOPTIONS socket option. No docu found.
2755 Implementation status: "Protocol not available".
2756  
2757  
2758 Option: res-debug
2759  
2760 Type: BOOL
2761 Option group: SOCK_IP
2762 Phase: INIT
2763 Platforms: all
2764  
2765 Apply the debug resolver option to all queries of this XIO address.
2766  
2767  
2768 Option: res-aaonly
2769 Aliases: aaonly
2770  
2771 Type: BOOL
2772 Option group: SOCK_IP
2773 Phase: INIT
2774 Platforms: all
2775  
2776 Apply the aaonly resolver option to all queries of this XIO address.
2777  
2778  
2779 Option: res-usevc
2780 Aliases: usevc
2781  
2782 Type: BOOL
2783 Option group: SOCK_IP
2784 Phase: INIT
2785 Platforms: all
2786  
2787 Apply the usevc resolver option to all queries of this XIO address.
2788  
2789  
2790 Option: res-primary
2791 Aliases: primary
2792  
2793 Type: BOOL
2794 Option group: SOCK_IP
2795 Phase: INIT
2796 Platforms: all
2797  
2798 Apply the primary resolver option to all queries of this XIO address.
2799  
2800  
2801 Option: res-igntc
2802 Aliases: igntc
2803  
2804 Type: BOOL
2805 Option group: SOCK_IP
2806 Phase: INIT
2807 Platforms: all
2808  
2809 Apply the igntc resolver option to all queries of this XIO address.
2810  
2811  
2812 Option: res-recurse
2813 Aliases: recurse
2814  
2815 Type: BOOL
2816 Option group: SOCK_IP
2817 Phase: INIT
2818 Platforms: all
2819  
2820 Apply the recurse resolver option to all queries of this XIO address.
2821  
2822  
2823 Option: res-defnames
2824 Aliases: defnames
2825  
2826 Type: BOOL
2827 Option group: SOCK_IP
2828 Phase: INIT
2829 Platforms: all
2830  
2831 Apply the defnames resolver option to all queries of this XIO address.
2832  
2833  
2834 Option: res-stayopen
2835 Aliases: stayopen
2836  
2837 Type: BOOL
2838 Option group: SOCK_IP
2839 Phase: INIT
2840 Platforms: all
2841  
2842 Apply the stayopen resolver option to all queries of this XIO address.
2843  
2844  
2845 Option: res-dnsrch
2846 Aliases: dnsrch
2847  
2848 Type: BOOL
2849 Option group: SOCK_IP
2850 Phase: INIT
2851 Platforms: all
2852  
2853 Apply the dnsrch resolver option to all queries of this XIO address.
2854  
2855  
2856 -------------------------------------------------------------------------------
2857 IP6 options
2858  
2859  
2860 Option: ipv6-v6only=value
2861 Alias: ipv6only, v6only
2862  
2863 Type: BOOL
2864 Option group: SOCK_IP6
2865 Phase: PASTSOCKET
2866 Platforms: FreeBSD, Linux
2867  
2868 Apply the IPV6_V6ONLY socket option to the file descriptor. This controls if
2869 the socket listens only on the IPv6 protocol or also on IPv4.
2870  
2871  
2872 -------------------------------------------------------------------------------
2873 IPAPP (TCP and UDP) options
2874  
2875  
2876 Option: sourceport=value
2877 Alias: sp=value
2878  
2879 Type: 2BYTE
2880 Option group: IPAPP (IP_TCP and IP_UDP)
2881 Phase: LATE
2882 Platforms: all
2883  
2884 For outgoing (client) TCP and UDP connections, it sets the source port (local port, client side port) of
2885 the socket connection. For server type addresses, requires the client to use
2886 this sourceport, otherwise socat immediately shuts down the connection.
2887 On UNIX class operating systems root privilege are required to set a source
2888 port between 1 and 1023 incl. 0 gives a "random" port number >= 1024, which is
2889 the default.
2890  
2891  
2892 Option: lowport
2893  
2894 Type: BOOL
2895 Option group: IPAPP (IP_TCP and IP_UDP)
2896 Phase: LATE
2897 Platforms: all
2898  
2899 For outgoing (client) TCP and UDP connections, it sets the source
2900 to an unused random port between 640 and 1023 incl. On UN*X type operating
2901 systems, this requires root privilege, and thus guaranties the peer to be
2902 root authorized.
2903 With TCP or UDP listen addresses, socat immediately shuts down the
2904 connection if the client does not use a sourceport <= 1023.
2905 This mechanism can provide limited authorization under some circumstances.
2906  
2907 -------------------------------------------------------------------------------
2908 TCP options
2909  
2910  
2911 Option: tcp-nodelay
2912 Aliases: nodelay
2913  
2914 Logical type: bool
2915 Physical type: INT
2916 Option group: IP_TCP
2917 Phase: PASTSOCKET
2918 Platforms: all
2919  
2920 Sets the TCP_NODELAY flag of the TCP socket. This turns off Nagles algorithm.
2921  
2922  
2923 Option: tcp-maxseg
2924 Aliases: maxseg, mss
2925  
2926 Type: INT
2927 Option group: IP_TCP
2928 Phase: PASTSOCKET
2929 Platforms: all
2930  
2931 Limits the MAXSEG (MSS) value of the TCP socket. This option is applied before
2932 the connect or listen call, so it is transferred in the SYN packet to the peer
2933 socket.
2934 Linux client: 0 gives "invalid argument", higher values are used in SYN
2935 negotiation, but effective MSS is n-12, at least 8.
2936 On AIX, this is a read-only option.
2937  
2938  
2939 Option: tcp-maxseg-late
2940 Aliases: maxseg-late, mss-late
2941  
2942 Type: INT
2943 Option group: IP_TCP
2944 Phase: CONNECTED
2945 Platforms: all
2946  
2947 Limits the MAXSEG (MSS) value of the TCP socket. This option is applied past
2948 the connect or accept call, so it is not transferred as MSS to the peer socket.
2949 Observation with Linux 2.2: does not influence the size of packets generated
2950 by the local socket.
2951  
2952  
2953 Option: tcp-cork
2954 Aliases: cork
2955  
2956 Logical type: bool
2957 Physical type: INT
2958 Option group: IP_TCP
2959 Phase: PASTSOCKET
2960 Platforms: Linux
2961  
2962 Sets the TCP_CORK option.
2963  
2964  
2965 Option: tcp-stdurg
2966 Aliases: stdurg
2967  
2968 Logical type: bool
2969 Physical type: INT
2970 Option group: IP_TCP
2971 Phase: PASTSOCKET
2972 Platforms: none
2973  
2974 Applies the TCP_STDURG option with setsockopt. This enables RFC 1122 compliant
2975 urgent point handling.
2976  
2977  
2978 Option: tcp-rfc1323
2979 Aliases: rfc1323
2980  
2981 Logical type: bool
2982 Physical type: INT
2983 Option group: IP_TCP
2984 Phase: PASTSOCKET
2985 Platforms: none
2986  
2987 Applies the TCP_RFC1323 option with setsockopt. This enables RFC1323 TCP
2988 enhancements (window scale, timestamp).
2989  
2990  
2991 Option: tcp-keepidle
2992 Aliases: keepidle
2993  
2994 Type: INT
2995 Option group: IP_TCP
2996 Phase: PASTSOCKET
2997 Platforms: Linux
2998  
2999 Sets the TCP_KEEPIDLE value of the socket with setsockopt(). Starts keepalive
3000 after this period (in seconds?)
3001  
3002  
3003 Option: tcp-keepintvl
3004 Aliases: keepintvl
3005  
3006 Type: INT
3007 Option group: IP_TCP
3008 Phase: PASTSOCKET
3009 Platforms: Linux
3010  
3011 Sets the TCP_KEEPINTVL value of the socket with setsockopt(). Interval between
3012 keepalives (in seconds?)
3013  
3014  
3015 Option: tcp-keepcnt
3016 Aliases: keepcnt
3017  
3018 Type: INT
3019 Option group: IP_TCP
3020 Phase: PASTSOCKET
3021 Platforms: Linux
3022  
3023 Sets the TCP_KEEPCNT value of the socket with setsockopt(). Number of
3024 keepalives before death.
3025  
3026  
3027 Option: tcp-syncnt
3028 Aliases: syncnt
3029  
3030 Type: INT
3031 Option group: IP_TCP
3032 Phase: PASTSOCKET
3033 Platforms: Linux
3034  
3035 Sets the TCP_SYNCNT value of the socket with setsockopt(). Number of SYN
3036 retransmits.
3037  
3038  
3039 Option: tcp-linger2
3040 Aliases: linger2
3041  
3042 Type: INT
3043 Option group: IP_TCP
3044 Phase: PASTSOCKET
3045 Platforms: Linux
3046  
3047 Sets the TCP_LINGER2 value of the socket with setsockopt(). Life time of
3048 orphaned FIN-WAIT-2 state.
3049  
3050  
3051 Option: tcp-defer-accept
3052 Aliases: defer-accept
3053  
3054 Type: INT
3055 Option group: IP_TCP
3056 Phase: PASTSOCKET
3057 Platforms: Linux
3058  
3059 Sets the TCP_DEFER_ACCEPT value of the socket with setsockopt(). accept() of
3060 the listener will only return when data arrived at the new connection. The
3061 value is converted to seconds by some algorithm.
3062  
3063  
3064 Option: tcp-window-clamp
3065 Aliases: window-clamp
3066  
3067 Type: INT
3068 Option group: IP_TCP
3069 Phase: PASTSOCKET
3070 Platforms: Linux
3071  
3072 Sets the TCP_WINDOW_CLAMP value of the socket with setsockopt(). "Bound advertised
3073 window".
3074  
3075  
3076 Option: tcp-info
3077 Aliases: info
3078  
3079 Type: INT
3080 Option group: IP_TCP
3081 Phase: PASTSOCKET
3082 Platforms: FreeBSD, Linux
3083  
3084 Sets the TCP_INFO value of the socket with setsockopt(). Is a read only option,
3085 so it always generates an error.
3086  
3087  
3088 Option: tcp-quickack
3089 Aliases: quickack
3090  
3091 Type: INT
3092 Option group: IP_TCP
3093 Phase: PASTSOCKET
3094 Platforms: Linux
3095  
3096 Sets the TCP_QUICKACK option with setsockopt().
3097  
3098  
3099 Option: tcp-md5sig
3100 Aliases: md5sig
3101  
3102 Type: INT
3103 Option group: IP_TCP
3104 Phase: PASTSOCKET
3105 Platforms: none
3106  
3107 Enables generation of MD5 digests on the packets.
3108  
3109  
3110 Option: tcp-noopt
3111 Aliases: noopt
3112  
3113 Type: INT
3114 Option: group: IP_TCP
3115 Phase: PASTSOCKET
3116 Platforms: FreeBSD
3117  
3118 Disables use of TCP options.
3119  
3120  
3121 Option: tcp-nopush
3122 Aliases: nopush
3123  
3124 Type: INT
3125 Option: group: IP_TCP
3126 Phase: PASTSOCKET
3127 Platforms: FreeBSD
3128  
3129 Sets the TCP_NOPUSH option.
3130  
3131  
3132 Option: tcp-sack-disable
3133 Aliases: sack-disable
3134  
3135 Type: INT
3136 Option: group: IP_TCP
3137 Phase: PASTSOCKET
3138 Platforms: none
3139  
3140 Disables use the selective acknowledge feature.
3141  
3142  
3143 Option: tcp-signature-enable
3144 Aliases: signature-enable
3145  
3146 Type: INT
3147 Option: group: IP_TCP
3148 Phase: PASTSOCKET
3149 Platforms: none
3150  
3151 Enables generation of MD5 digests on the packets.
3152  
3153  
3154 Option: tcp-abort-threshold
3155 Aliases: abort-threshold
3156  
3157 Type: INT
3158 Option group: IP_TCP
3159 Phase: PASTSOCKET
3160 Platforms: HP-UX, SunOS
3161  
3162 Sets the time to wait for an answer of the peer on an established connection.
3163  
3164  
3165 Option: tcp-conn-abort-threshold
3166 Aliases: conn-abort-threshold
3167  
3168 Type: INT
3169 Option group: IP_TCP
3170 Phase: PASTSOCKET
3171 Platforms: HP-UX, SunOS
3172  
3173 Sets the time to wait for an answer of the server during the initial connect.
3174  
3175  
3176 Option: tcp-keepinit
3177 Aliases: keepinit
3178  
3179 Type: INT
3180 Option group: IP_TCP
3181 Phase: PASTSOCKET
3182 Platforms: none
3183  
3184 Sets the time to wait for an answer of the server during connect() before
3185 giving up. Value in half seconds, default is 150 (75s).
3186  
3187  
3188 Option: tcp-paws
3189 Aliases: paws
3190  
3191 Type: BOOL
3192 Option group: IP_TCP
3193 Phase: PASTSOCKET
3194 Platforms: none
3195  
3196 Enables the "protect against wrapped sequence numbers" feature.
3197  
3198  
3199 Option: tcp-sackena
3200 Aliases: sackena
3201  
3202 Type: BOOL
3203 Option group: IP_TCP
3204 Phase: PASTSOCKET
3205 Platforms: none
3206  
3207 Enables selective acknowledge.
3208  
3209  
3210 Option: tcp-tsoptena
3211 Aliases: tsoptena
3212  
3213 Type: BOOL
3214 Option group: IP_TCP
3215 Phase: PASTSOCKET
3216 Platforms: none
3217  
3218 Enables the time stamp option that allows RTT recalculation on existing
3219 connections.
3220  
3221  
3222 ===============================================================================
3223 SOCKS options
3224  
3225  
3226 Option: socksport
3227  
3228 Type: STRING
3229 Option group: IP_SOCKS4
3230 Phase: LATE
3231 Platforms: all
3232  
3233 Overrides the default socks server port 1080
3234  
3235  
3236 Option: socksuser
3237  
3238 Type: NAME
3239 Option group: IP_SOCKS4
3240 Phase: LATE
3241 Platforms: all
3242  
3243 Overrides the system derived socks user name ($USER or $LOGNAME or "anonymous")
3244  
3245  
3246 ===============================================================================
3247 HTTP options
3248  
3249  
3250 Option: proxyport
3251  
3252 Type: STRING
3253 Option group: HTTP
3254 Phase: LATE
3255 Platforms: all
3256  
3257 Overrides the default HTTP proxy port 8080.
3258  
3259  
3260 Option: ignorecr
3261  
3262 Type: BOOL
3263 Option group: HTTP
3264 Phase: LATE
3265 Platforms: all
3266  
3267 The HTTP protocol requires the use of CR+NL as line terminator. When a proxy
3268 server violates this standard, socat might not understand its answer.
3269 This option directs socat to interprete NL as line terminator and
3270 to ignore CR in the answer. Nevertheless, socat sends CR+NL to the proxy.
3271  
3272  
3273 Option: proxyauth
3274  
3275 Type: STRING
3276 Option group: HTTP
3277 Phase: LATE
3278 Platforms: all
3279  
3280 Provide "basic" authentication to the proxy server. The argument to the option
3281 must be the username followed by ':' followed by the password. This string is
3282 used with a "Proxy-Authorize: Base" header in base64 encoded form.
3283  
3284  
3285 Option: resolve
3286  
3287 Type: BOOL
3288 Option group: HTTP
3289 Phase: LATE
3290 Platforms: all
3291  
3292 Per default, socat sends to the proxy a CONNECT request containing the target
3293 hostname. With this option, socat resolves the hostname locally and sends the
3294 IP address.
3295  
3296  
3297 ===============================================================================
3298 TERMIOS options
3299  
3300 These options are applied with tcsetattr calls with a struct termios.
3301 Attention: Applying these options to stdin/stdout when they refer to your
3302 terminal might directly effect your terminal!
3303 See Linux:"man 3 termios" and Linux:"man 2 stty"
3304  
3305 -------------------------------------------------------------------------------
3306 TERMIOS combined modes
3307  
3308  
3309 Option: raw
3310  
3311 Type: CONST
3312 Option group: TERMIOS
3313 Phase: FD
3314 Platforms: all
3315  
3316 Is equivalent to
3317 ignbrk=0,brkint=0,ignpar=0,parmrk=0,inpck=0,istrip=0,inlcr=0,igncr=0,icrnl=0,ixon=0,ixoff=0,iuclc=0,ixany=0,imaxbel=0,opost=0,isig=0,icanon=0,xcase=0,vmin=1,vtime=0
3318  
3319  
3320 Option: sane
3321  
3322 Type: CONST
3323 Option group: TERMIOS
3324 Phase: FD
3325 Platforms: all
3326  
3327 Is equivalent to
3328 cread,ignbrk=0,brkint,inlcr=0,igncr=0,icrnl,ixoff=0,iuclc=0,-ixany=0,imaxbel,opost,olcuc=0,ocrnl=0,onlcr,onocr=0,onlret=0,ofill=0,ofdel=0,nl0,cr0,tab0,bs0,vt0,ff0,isig,icanon,iexten,echo,echoe,echok,echonl=0,noflsh=0,xcase=0,tostop=0,echoprt=0,echoctl,echoke
3329  
3330 -------------------------------------------------------------------------------
3331 TERMIOS input mode flags
3332  
3333  
3334 Option: ignbrk
3335  
3336 Type: BOOL
3337 Option group: TERMIOS
3338 Phase: FD
3339 Platforms: all
3340  
3341 Sets the IGNBRK flag of the terminal driver.
3342  
3343  
3344 Option: brkint
3345  
3346 Type: BOOL
3347 Option group: TERMIOS
3348 Phase: FD
3349 Platforms: all
3350  
3351 Sets the BRKINT flag of the terminal driver.
3352  
3353  
3354 Option: ignpar
3355  
3356 Type: BOOL
3357 Option group: TERMIOS
3358 Phase: FD
3359 Platforms: all
3360  
3361 Sets the IGNPAR flag of the terminal driver.
3362  
3363  
3364 Option: parmrk
3365  
3366 Type: BOOL
3367 Option group: TERMIOS
3368 Phase: FD
3369 Platforms: all
3370  
3371 Sets the PARMRK flag of the terminal driver.
3372  
3373  
3374 Option: inpck
3375  
3376 Type: BOOL
3377 Option group: TERMIOS
3378 Phase: FD
3379 Platforms: all
3380  
3381 Sets the INPCK flag of the terminal driver. Enables input parity checking.
3382  
3383  
3384 Option: istrip
3385  
3386 Type: BOOL
3387 Option group: TERMIOS
3388 Phase: FD
3389 Platforms: all
3390  
3391 Sets the ISTRIP flag of the terminal driver. Strips off the eighth bit.
3392  
3393  
3394 Option: inlcr
3395  
3396 Type: BOOL
3397 Option group: TERMIOS
3398 Phase: FD
3399 Platforms: all
3400  
3401 Sets the INLCR flag of the terminal driver. Translates NL to CR on input.
3402  
3403  
3404 Option: igncr
3405  
3406 Type: BOOL
3407 Option group: TERMIOS
3408 Phase: FD
3409 Platforms: all
3410  
3411 Sets the IGNCR flag of the terminal driver. Ignores CR character on input.
3412  
3413  
3414 Option: icrnl
3415  
3416 Type: BOOL
3417 Option group: TERMIOS
3418 Phase: FD
3419 Platforms: all
3420  
3421 Sets the ICRNL flag of the terminal driver. Translates CR to NL on input. This
3422 option is ignored when IGNCR is set.
3423  
3424  
3425 Option: iuclc
3426  
3427 Type: BOOL
3428 Option group: TERMIOS
3429 Phase: FD
3430 Platforms: HP-UX, Linux, SunOS
3431  
3432 Sets the IUCLC flag of the terminal driver. Changes characters in input from
3433 uppercase to lowercase.
3434  
3435  
3436 Option: ixon
3437  
3438 Type: BOOL
3439 Option group: TERMIOS
3440 Phase: FD
3441 Platforms: all
3442  
3443 Sets the IXON flag of the terminal driver. Enables XON/XOFF flow control on
3444 output (?).
3445  
3446  
3447 Option: ixany
3448  
3449 Type: BOOL
3450 Option group: TERMIOS
3451 Phase: FD
3452 Platforms: all
3453  
3454 Sets the IXANY flag of the terminal driver. Enables any character to restart
3455 output.
3456  
3457  
3458 Option: ixoff
3459 Aliases: tandem
3460  
3461 Type: BOOL
3462 Option group: TERMIOS
3463 Phase: FD
3464 Platforms: all
3465  
3466 Sets the IXOFF flag of the terminal driver. Enables XON/XOFF flow control on
3467 input.
3468  
3469  
3470 Option: imaxbel
3471  
3472 Type: BOOL
3473 Option group: TERMIOS
3474 Phase: FD
3475 Platforms: all
3476  
3477 Sets the IMAXBEL flag of the terminal driver. Rings the bell when the input
3478 queue is full.
3479  
3480 -------------------------------------------------------------------------------
3481 TERMIOS output mode flags
3482  
3483  
3484 Option: opost
3485  
3486 Type: BOOL
3487 Option group: TERMIOS
3488 Phase: FD
3489 Platforms: all
3490  
3491 Sets the OPOST flag of the terminal driver.
3492  
3493  
3494 Option: olcuc
3495  
3496 Type: BOOL
3497 Option group: TERMIOS
3498 Phase: FD
3499 Platforms: HP-UX, Linux, SunOS
3500  
3501 Sets the OLCUC flag of the terminal driver.
3502  
3503  
3504 Option: onlcr
3505  
3506 Type: BOOL
3507 Option group: TERMIOS
3508 Phase: FD
3509 Platforms: all
3510  
3511 Sets the ONLCR flag of the terminal driver.
3512  
3513  
3514 Option: ocrnl
3515  
3516 Type: BOOL
3517 Option group: TERMIOS
3518 Phase: FD
3519 Platforms: all
3520  
3521 Sets the OCRNL flag of the terminal driver.
3522  
3523  
3524 Option: onocr
3525  
3526 Type: BOOL
3527 Option group: TERMIOS
3528 Phase: FD
3529 Platforms: all
3530  
3531 Sets the ONOCR flag of the terminal driver.
3532  
3533  
3534 Option: onlret
3535  
3536 Type: BOOL
3537 Option group: TERMIOS
3538 Phase: FD
3539 Platforms: all
3540  
3541 Sets the ONLRET flag of the terminal driver.
3542  
3543  
3544 Option: ofill
3545  
3546 Type: BOOL
3547 Option group: TERMIOS
3548 Phase: FD
3549 Platforms: HP-UX, Linux, SunOS
3550  
3551 Sets the OFILL flag of the terminal driver.
3552  
3553  
3554 Option: ofdel
3555  
3556 Type: BOOL
3557 Option group: TERMIOS
3558 Phase: FD
3559 Platforms: HP-UX, Linux, SunOS
3560  
3561 Sets the OFDEL flag of the terminal driver.
3562  
3563  
3564 Option: nldly
3565  
3566 Type: BOOL
3567 Option group: TERMIOS
3568 Phase: FD
3569 Platforms: HP-UX, Linux, SunOS
3570  
3571 Sets the NLDLY flag of the terminal driver. 0 sets the value to NL0, and 1 to
3572 NL1. See nl0, nl1.
3573  
3574  
3575 Option: nl0
3576  
3577 Type: CONST (const bool, always sets 0)
3578 Option group: TERMIOS
3579 Phase: FD
3580 Platforms: HP-UX, Linux, SunOS
3581  
3582 Sets the field NLDLY to the value NL0.
3583  
3584  
3585 Option: nl1
3586  
3587 Type: CONST (const bool, always sets 1)
3588 Option group: TERMIOS
3589 Phase: FD
3590 Platforms: HP-UX, Linux, SunOS
3591  
3592 Sets the field NLDLY to the value NL1.
3593  
3594  
3595 Option: crdly=value
3596  
3597 Type: UINT (0..3)
3598 Option group: TERMIOS
3599 Phase: FD
3600 Platforms: HP-UX, Linux, SunOS
3601  
3602 Sets the field CRDLY to the given value.
3603 See cr0, cr1, cr2, cr3.
3604  
3605  
3606 Option: cr0
3607  
3608 Type: CONST
3609 Option group: TERMIOS
3610 Phase: FD
3611 Platforms: HP-UX, Linux, SunOS
3612  
3613 Sets the CRDLY field to the value CR0.
3614 See crdly.
3615  
3616  
3617 Option: cr1
3618  
3619 Type: CONST
3620 Option group: TERMIOS
3621 Phase: FD
3622 Platforms: HP-UX, Linux, SunOS
3623  
3624 Sets the CRDLY field to the value CR1.
3625 See crdly.
3626  
3627  
3628 Option: cr2
3629  
3630 Type: CONST
3631 Option group: TERMIOS
3632 Phase: FD
3633 Platforms: HP-UX, Linux, SunOS
3634  
3635 Sets the CRDLY field to the value CR2.
3636 See crdly.
3637  
3638  
3639 Option: cr3
3640  
3641 Type: CONST
3642 Option group: TERMIOS
3643 Phase: FD
3644 Platforms: HP-UX, Linux, SunOS
3645  
3646 Sets the CRDLY field to the value CR3.
3647 See crdly.
3648  
3649  
3650 Option: tab0
3651  
3652 Type: CONST
3653 Option group: TERMIOS
3654 Phase: FD
3655 Platforms: HP-UX, Linux, SunOS
3656  
3657 Sets the horizontal tab delay mask to TAB0.
3658 See tabdly.
3659  
3660  
3661 Option: tab1
3662  
3663 Type: CONST
3664 Option group: TERMIOS
3665 Phase: FD
3666 Platforms: HP-UX, Linux, SunOS
3667  
3668 Sets the horizontal tab delay mask to TAB1.
3669 See tabdly.
3670  
3671  
3672 Option: tab2
3673  
3674 Type: CONST
3675 Option group: TERMIOS
3676 Phase: FD
3677 Platforms: HP-UX, Linux, SunOS
3678  
3679 Sets the horizontal tab delay mask to TAB2.
3680 See tabdly.
3681  
3682  
3683 Option: tab3
3684  
3685 Type: CONST
3686 Option group: TERMIOS
3687 Phase: FD
3688 Platforms: HP-UX, Linux, SunOS
3689  
3690 Sets the horizontal tab delay mask to TAB3.
3691 See tabdly.
3692  
3693  
3694 Option: tabdly=value
3695  
3696 Type: UINT (0..3)
3697 Option group: TERMIOS
3698 Phase: FD
3699 Platforms: HP-UX, Linux, SunOS
3700  
3701 Sets the field TABDLY to the given value.
3702 See tab0, tab1, tab2, and tab3.
3703  
3704  
3705 Option: xtabs
3706  
3707 Type: CONST
3708 Option group: TERMIOS
3709 Phase: FD
3710 Platforms: HP-UX, Linux, SunOS
3711  
3712 Sets the horizontal tab delay mask to XTABS.
3713  
3714  
3715 Option: bs0
3716  
3717 Type: CONST (0)
3718 Option group: TERMIOS
3719 Phase: FD
3720 Platforms: HP-UX, Linux, SunOS
3721  
3722 Sets the field BSDLY to the value BS0
3723  
3724  
3725 Option: bs1
3726  
3727 Type: CONST (1)
3728 Option group: TERMIOS
3729 Phase: FD
3730 Platforms: HP-UX, Linux, SunOS
3731  
3732 Sets the field BSDLY to the value BS1
3733  
3734  
3735 Option: bsdly
3736  
3737 Type: BOOL
3738 Option group: TERMIOS
3739 Phase: FD
3740 Platforms: HP-UX, Linux, SunOS
3741  
3742 Sets the BSDLY flag of the terminal driver. 0 sets the value to BS0, and 1 to
3743 BS1. See bs0, bs1.
3744  
3745  
3746 Option: vt0
3747  
3748 Type: CONST (0)
3749 Option group: TERMIOS
3750 Phase: FD
3751 Platforms: HP-UX, Linux, SunOS
3752  
3753 Sets the field VTDLY to the value VT0
3754  
3755  
3756 Option: vt1
3757  
3758 Type: CONST (1)
3759 Option group: TERMIOS
3760 Phase: FD
3761 Platforms: HP-UX, Linux, SunOS
3762  
3763 Sets the field VTDLY to the value VT1
3764  
3765  
3766 Option: vtdly
3767  
3768 Type: BOOL
3769 Option group: TERMIOS
3770 Phase: FD
3771 Platforms: HP-UX, Linux, SunOS
3772  
3773 Sets the VTDLY flag of the terminal driver. 0 sets the value to VT0, and 1 to
3774 VT1. See vt0, vt1.
3775  
3776  
3777 Option: ff0
3778  
3779 Type: CONST (0)
3780 Option group: TERMIOS
3781 Phase: FD
3782 Platforms: HP-UX, Linux, SunOS
3783  
3784 Sets the field FFDLY to the value FF0
3785 See ffdly.
3786  
3787  
3788 Option: ff1
3789  
3790 Type: CONST (1)
3791 Option group: TERMIOS
3792 Phase: FD
3793 Platforms: HP-UX, Linux, SunOS
3794  
3795 Sets the field FFDLY to the value FF1
3796 See ffdly.
3797  
3798  
3799 Option: ffdly
3800  
3801 Type: BOOL (0..1)
3802 Option group: TERMIOS
3803 Phase: FD
3804 Platforms: HP-UX, Linux, SunOS
3805  
3806 Sets the FFDLY flag of the terminal driver. 0 sets the value to FF0, and 1 to
3807 FF1. See ff0, ff1.
3808  
3809  
3810  
3811 -------------------------------------------------------------------------------
3812 TERMIOS control mode flags
3813  
3814  
3815 Option: cs5
3816  
3817 Type: CONST
3818 Option group: TERMIOS
3819 Phase: FD
3820 Platforms: all
3821  
3822 Sets the field CSIZE to the value CS5
3823  
3824  
3825 Option: cs6
3826  
3827 Type: CONST
3828 Option group: TERMIOS
3829 Phase: FD
3830 Platforms: all
3831  
3832 Sets the field CSIZE to the value CS6
3833  
3834  
3835 Option: cs7
3836  
3837 Type: CONST
3838 Option group: TERMIOS
3839 Phase: FD
3840 Platforms: all
3841  
3842 Sets the field CSIZE to the value CS7
3843  
3844  
3845 Option: cs8
3846  
3847 Type: CONST
3848 Option group: TERMIOS
3849 Phase: FD
3850 Platforms: all
3851  
3852 Sets the field CSIZE to the value CS8
3853  
3854  
3855 Option: csize
3856  
3857 Type: UINT (0..3)
3858 Option group: TERMIOS
3859 Phase: FD
3860 Platforms: all
3861  
3862 Sets the field CSIZE. 0..CS5, 1..CS6, 2..CS7, 3..CS8
3863  
3864  
3865 Option: cstopb
3866  
3867 Type: BOOL
3868 Option group: TERMIOS
3869 Phase: FD
3870 Platforms: all
3871  
3872 Sets the flag CSTOPB.
3873  
3874  
3875 Option: cread
3876  
3877 Type: BOOL
3878 Option group: TERMIOS
3879 Phase: FD
3880 Platforms: all
3881  
3882 Sets the value of the CREAD flag.
3883  
3884  
3885 Option: parenb
3886  
3887 Type: BOOL
3888 Option group: TERMIOS
3889 Phase: FD
3890 Platforms: all
3891  
3892 Sets the PARENB flag of the terminal driver.
3893  
3894  
3895 Option: parodd
3896  
3897 Type: BOOL
3898 Option group: TERMIOS
3899 Phase: FD
3900 Platforms: all
3901  
3902 Sets the PARODD flag of the terminal driver.
3903  
3904  
3905 Option: hupcl
3906 Aliases: hup
3907  
3908 Type: BOOL
3909 Option group: TERMIOS
3910 Phase: FD
3911 Platforms: all
3912  
3913 Sets the HUPCL flag of the terminal driver.
3914  
3915  
3916 Option: clocal
3917  
3918 Type: BOOL
3919 Option group: TERMIOS
3920 Phase: FD
3921 Platforms: all
3922  
3923 Sets the CLOCAL flag of the terminal driver.
3924  
3925  
3926 Option: crtscts
3927  
3928 Type: BOOL
3929 Option group: TERMIOS
3930 Phase: FD
3931 Platforms: FreeBSD, Linux, SunOS
3932  
3933 Sets the CRTSCTS flag of the terminal driver.
3934  
3935  
3936 Option: b0 (HP-UX, Linux, SunOS)
3937 Option: b50 (HP-UX, Linux, SunOS)
3938 Option: b75 (HP-UX, Linux, SunOS)
3939 Option: b110 (HP-UX, Linux, SunOS)
3940 Option: b134 (HP-UX, Linux, SunOS)
3941 Option: b150 (HP-UX, Linux, SunOS)
3942 Option: b200 (HP-UX, Linux, SunOS)
3943 Option: b300 (HP-UX, Linux, SunOS)
3944 Option: b600 (HP-UX, Linux, SunOS)
3945 Option: b900 (HP-UX)
3946 Option: b1200 (HP-UX, Linux, SunOS)
3947 Option: b1800 (HP-UX, Linux, SunOS)
3948 Option: b2400 (HP-UX, Linux, SunOS)
3949 Option: b3600 (HP-UX)
3950 Option: b4800 (HP-UX, Linux, SunOS)
3951 Option: b7200 (HP-UX)
3952 Option: b9600 (HP-UX, Linux, SunOS)
3953 Option: b19200 (HP-UX, Linux, SunOS)
3954 Option: b38400 (HP-UX, Linux, SunOS)
3955 Option: b57600 (HP-UX, Linux, SunOS)
3956 Option: b115200 (HP-UX, Linux, SunOS)
3957 Option: b230400 (HP-UX, Linux, SunOS)
3958 Option: b460800 (HP-UX, Linux, SunOS)
3959 Option: b500000 (Linux)
3960 Option: b576000 (Linux)
3961 Option: b921600 (Linux)
3962 Option: b1000000 (Linux)
3963 Option: b1152000 (Linux)
3964 Option: b1500000 (Linux)
3965 Option: b2000000 (Linux)
3966 Option: b2500000 (Linux)
3967 Option: b3000000 (Linux)
3968 Option: b3500000 (Linux)
3969 Option: b4000000 (Linux)
3970  
3971 Type: CONST
3972 Option group: TERMIOS
3973 Phase: FD
3974  
3975 Sets the baud rate to the implied value. b0 "hangs up" the connection.
3976  
3977  
3978 Option: ispeed
3979  
3980 Type: UINT
3981 Option group: TERMIOS
3982 Phase: FD
3983 Platforms: FreeBSD, Linux
3984  
3985 Sets the input baud rate to the specified value. This works on systems where
3986 struct termios has a special c_ispeed field.
3987  
3988  
3989 Option: ospeed
3990  
3991 Type: UINT
3992 Option group: TERMIOS
3993 Phase: FD
3994 Platforms: FreeBSD, Linux
3995  
3996 Sets the input baud rate to the specified value. This works on systems where
3997 struct termios has a special c_ospeed field.
3998  
3999  
4000  
4001  
4002 -------------------------------------------------------------------------------
4003 TERMIOS local mode flags
4004  
4005  
4006 Option: isig
4007  
4008 Type: BOOL
4009 Option group: TERMIOS
4010 Phase: FD
4011 Platforms: all
4012  
4013 Sets the ISIG flag of the terminal driver.
4014  
4015  
4016 Option: icanon
4017  
4018 Type: BOOL
4019 Option group: TERMIOS
4020 Phase: FD
4021 Platforms: all
4022  
4023 Sets the ICANON flag of the terminal driver.
4024  
4025  
4026 Option: xcase
4027  
4028 Type: BOOL
4029 Option group: TERMIOS
4030 Phase: FD
4031 Platforms: HP-UX, Linux, SunOS
4032  
4033 Sets the XCASE flag of the terminal driver.
4034  
4035  
4036 Option: echo
4037  
4038 Type: BOOL
4039 Option group: TERMIOS
4040 Phase: FD
4041 Platforms: all
4042  
4043 Sets the ECHO flag of the terminal driver.
4044  
4045  
4046 Option: echoe
4047 Aliases: crterase
4048  
4049 Type: BOOL
4050 Option group: TERMIOS
4051 Phase: FD
4052 Platforms: all
4053  
4054 Sets the ECHOE flag of the terminal driver.
4055  
4056  
4057 Option: echok
4058  
4059 Type: BOOL
4060 Option group: TERMIOS
4061 Phase: FD
4062 Platforms: all
4063  
4064 Sets the ECHOK flag of the terminal driver.
4065  
4066  
4067 Option: echonl
4068  
4069 Type: BOOL
4070 Option group: TERMIOS
4071 Phase: FD
4072 Platforms: all
4073  
4074 Sets the ECHONL flag of the terminal driver.
4075  
4076  
4077 Option: echoctl
4078 Aliases: ctlecho
4079  
4080 Type: BOOL
4081 Option group: TERMIOS
4082 Phase: FD
4083 Platforms: all
4084  
4085 Sets the ECHOCTL flag of the terminal driver.
4086  
4087  
4088 Option: echoprt
4089 Aliases: prterase
4090  
4091 Type: BOOL
4092 Option group: TERMIOS
4093 Phase: FD
4094 Platforms: all
4095  
4096 Sets the ECHOPRT flag of the terminal driver.
4097  
4098  
4099 Option: echoke
4100 Aliases: crtkill
4101  
4102 Type: BOOL
4103 Option group: TERMIOS
4104 Phase: FD
4105 Platforms: all
4106  
4107 Sets the ECHOKE flag of the terminal driver.
4108  
4109  
4110 Option: flusho
4111  
4112 Type: BOOL
4113 Option group: TERMIOS
4114 Phase: FD
4115 Platforms: all
4116  
4117 Sets the FLUSHO flag of the terminal driver.
4118  
4119  
4120 Option: noflsh
4121  
4122 Type: BOOL
4123 Option group: TERMIOS
4124 Phase: FD
4125 Platforms: all
4126  
4127 Sets the NOFLSH flag of the terminal driver.
4128  
4129  
4130 Option: tostop
4131  
4132 Type: BOOL
4133 Option group: TERMIOS
4134 Phase: FD
4135 Platforms: all
4136  
4137 Sets the TOSTOP flag of the terminal driver.
4138  
4139  
4140 Option: pendin
4141  
4142 Type: BOOL
4143 Option group: TERMIOS
4144 Phase: FD
4145 Platforms: all
4146  
4147 Sets the PENDIN flag of the terminal driver.
4148  
4149  
4150 Option: iexten
4151  
4152 Type: BOOL
4153 Option group: TERMIOS
4154 Phase: FD
4155 Platforms: all
4156  
4157 Sets the IEXTEN flag of the terminal driver.
4158  
4159  
4160 -------------------------------------------------------------------------------
4161 TERMIOS options for functional characters
4162  
4163 Option: vintr=value
4164 Aliases: intr=value
4165  
4166 Type: BYTE
4167 Option group: TERMIOS
4168 Phase: FD
4169 Platforms: all
4170 Status: tested
4171  
4172 Sets the value for the VINTR character that interrupts the current process.
4173 On UNIX systems the preset value usually is 3 (^C).
4174  
4175  
4176 Option: vquit=value
4177 Aliases: quit=value
4178  
4179 Type: BYTE
4180 Option group: TERMIOS
4181 Phase: FD
4182 Platforms: all
4183 Status: tested
4184  
4185 Sets the value for the VQUIT character that quits the current process.
4186 On my Linux 2.2 system the preset value is 0x1c (^\).
4187  
4188  
4189 Option: verase=value
4190 Aliases: erase=value
4191  
4192 Type: BYTE
4193 Option group: TERMIOS
4194 Phase: FD
4195 Platforms: all
4196 Status: tested
4197  
4198 Sets the value for the VERASE character that erases the last character.
4199 On many UNIX systems the preset value is 0x7f.
4200  
4201  
4202 Option: vkill=value
4203 Aliases: kill=value
4204  
4205 Type: BYTE
4206 Option group: TERMIOS
4207 Phase: FD
4208 Platforms: all
4209 Status: tested
4210  
4211 Sets the value for the VKILL character that kills (erases) the current line.
4212 On my Linux 2.2 system systems the preset value is 0x15 (^U).
4213  
4214  
4215 Option: veof=value
4216 Aliases: eof=value
4217  
4218 Type: BYTE
4219 Option group: TERMIOS
4220 Phase: FD
4221 Platforms: all
4222 Status: tested
4223  
4224 Sets the value for the VEOF character that kills indicate end of file.
4225 On most UNIX systems the preset value is 0x04 (^D).
4226  
4227  
4228 Option: vtime=value
4229 Aliases: time=value
4230  
4231 Type: BYTE
4232 Option group: TERMIOS
4233 Phase: FD
4234 Platforms: all
4235 Status: not tested
4236  
4237 Sets the value of VTIME. See "man 1 stty" / time.
4238 On my Linux 2.2 system the preset value is 0.
4239  
4240  
4241 Option: vmin=value
4242 Aliases: min=value
4243  
4244 Type: BYTE
4245 Option group: TERMIOS
4246 Phase: FD
4247 Platforms: all
4248 Status: not tested
4249  
4250 Sets the value of VMIN. See "man 1 stty" / time.
4251 On my Linux 2.2 system the preset value is 1.
4252  
4253  
4254 Option: vswtc=value
4255 Aliases: swtc=value, swtch=value
4256  
4257 Type: BYTE
4258 Option group: TERMIOS
4259 Phase: FD
4260 Platforms: Linux
4261 Status: not tested
4262  
4263 Sets the value of VSWTC. "Switches to a different shell layer".
4264 On my Linux 2.2 system the preset value is 0.
4265  
4266  
4267 Option: vstart=value
4268 Aliases: start=value
4269  
4270 Type: BYTE
4271 Option group: TERMIOS
4272 Phase: FD
4273 Platforms: all
4274 Status: tested
4275  
4276 Sets the value for the VSTART character that resumes data flow after a stop.
4277 Usually the preset value is 0x11 (^Q).
4278  
4279  
4280 Option: vstop=value
4281 Aliases: stop=value
4282  
4283 Type: BYTE
4284 Option group: TERMIOS
4285 Phase: FD
4286 Platforms: all
4287 Status: tested
4288  
4289 Sets the value for the VSTOP character that stops output.
4290 Usually the preset value is 0x13 (^S)
4291  
4292  
4293 Option: vsusp=value
4294 Aliases: susp=value
4295  
4296 Type: BYTE
4297 Option group: TERMIOS
4298 Phase: FD
4299 Platforms: all
4300 Status: tested
4301  
4302 Sets the value for the VSUSP character that suspends the current foreground
4303 process and reactivates the shell.
4304 Usually the preset value is 0x1a (^Z)
4305  
4306  
4307 Option: vdsusp=value
4308 Aliases: dsusp=value
4309  
4310 Type: BYTE
4311 Option group: TERMIOS
4312 Phase: FD
4313 Platforms: FreeBSD, HP-UX, SunOS
4314 Status: tested
4315  
4316 Sets the value for the VDSUSP character that suspends the current foreground
4317 process and reactivates the shell.
4318  
4319  
4320 Option: veol=value
4321 Aliases: eol=value
4322  
4323 Type: BYTE
4324 Option group: TERMIOS
4325 Phase: FD
4326 Platforms: all
4327 Status: tested with awkward results
4328  
4329 Sets the value for the VEOL character that should indicate end of line.
4330 Not clear what differentiates it from the return key; xterm window put "xterm"
4331 into the input buffer.
4332 On my Linux 2.2 system the preset value is 0 (disabled)
4333  
4334  
4335 Option: vreprint=value
4336 Aliases: reprint=value, rprnt=value
4337  
4338 Type: BYTE
4339 Option group: TERMIOS
4340 Phase: FD
4341 Platforms: FreeBSD, Linux, SunOS
4342 Status: not tested
4343  
4344 Sets the value for the VREPRINT character that should reprint the current line.
4345 On my Linux 2.2 system the preset value is 0x12 (^R). Nevertheless, bash
4346 enters backward search mode.
4347  
4348  
4349 Option: vdiscard=value
4350 Aliases: discard=value
4351  
4352 Type: BYTE
4353 Option group: TERMIOS
4354 Phase: FD
4355 Platforms: FreeBSD, Linux, SunOS
4356 Status: not tested
4357  
4358 Sets the value for the VDISCARD character.
4359 On my Linux 2.2 system the preset value is 0x0f (^O)
4360  
4361  
4362 Option: vwerase=value
4363 Aliases: werase=value
4364  
4365 Type: BYTE
4366 Option group: TERMIOS
4367 Phase: FD
4368 Platforms: all
4369 Status: tested
4370  
4371 Sets the value for the VWERASE character that erases the last word.
4372 On my Linux 2.2 system the preset value is 0x17 (^W)
4373  
4374  
4375 Option: vlnext=value
4376 Aliases: lnext=value
4377  
4378 Type: BYTE
4379 Option group: TERMIOS
4380 Phase: FD
4381 Platforms: all
4382 Status: tested
4383  
4384 Sets the value for the VLNEXT character that lets the next input character raw
4385 (not interpreted).
4386 On my Linux 2.2 system the preset value is 0x16 (^V)
4387  
4388  
4389 Option: veol2=value
4390 Aliases: eol2=value
4391  
4392 Type: BYTE
4393 Option group: TERMIOS
4394 Phase: FD
4395 Platforms: all
4396 Status: not tested
4397  
4398 Sets the value for the VEOL2 character.
4399 On my Linux 2.2 system the preset value is 0 (disabled).
4400  
4401  
4402 ===============================================================================
4403 READLINE options
4404  
4405 Option: history-file=filename
4406 Aliases: history=filename
4407  
4408 Type: STRING
4409 Option group: READLINE
4410 Phase: LATE
4411 Platforms: (depends on libreadline installation)
4412  
4413 Without this option, the readline address uses only a per process history
4414 list. With this option, socat tries to read history lines during initialization
4415 from the given file, and on termination writes the old and new lines to the
4416 file.
4417 NOTE: currently, no mechanism is implemented for limiting the length of the
4418 history file.
4419 NOTE: filename must be a valid relativ or absolute path; "~" is not supported!
4420  
4421  
4422 Option: noprompt
4423  
4424 Type: BOOL
4425 Option group: READLINE
4426 Phase: LATE
4427 Platforms: all
4428  
4429 Since version 1.3.3, socat per default tries to determine a prompt -
4430 that is then passed to the readline call - by remembering the last
4431 incomplete line of the output. With this option, socat does not pass a
4432 prompt to the readline call, so it might set the cursor to the first column
4433 of the terminal.
4434  
4435  
4436 Option: noecho
4437  
4438 Type: STRING
4439 Option group: READLINE
4440 Phase: LATE
4441 Platforms: all
4442  
4443 Specifies a regular pattern for a prompt that prevents the following input
4444 line from being displayed on the screen and from being added to the history.
4445 The prompt is defined as the text that was output to the readline address
4446 after the lastest newline character and before an input character was
4447 typed. The pattern is a regular expression, e.g.
4448 "^[Pp]assword:.*$" or "([Uu]ser:|[Pp]assword:)". See regex(7) for details.
4449  
4450  
4451 Option: prompt
4452  
4453 Type: STRING
4454 Option group: READLINE
4455 Phase: LATE
4456 Platforms: all
4457  
4458 Passes the string as prompt to the readline function. readline prints this
4459 prompt when stepping through the history. If this string matches a constant
4460 prompt issued by an interactive program on the other socat address,
4461 consistent look and feel can be archieved.
4462  
4463 ===============================================================================
4464 OPENSSL options
4465  
4466 Option: openssl-cipherlist=string
4467 Aliases: cipherlist=string, ciphers=string, cipher=string
4468  
4469 Type: STRING
4470 Option group: OPENSSL
4471 Phase: SPEC
4472 Platforms: (depends on openssl installation)
4473  
4474 Selects the list of ciphers that may be used for the connection.
4475 See the man page ciphers(1), section CIPHER LIST FORMAT, for
4476 detailed information about syntax, values, and default of the cipherlist
4477 string.
4478 Several cipher strings may be given, separated by ':'.
4479 Some simple cipher strings:
4480 3DES Uses a cipher suite with triple DES.
4481 MD5 Uses a cipher suite with MD5.
4482 aNULL Uses a cipher suite without authentication.
4483 NULL Does not use encryption.
4484 HIGH Uses a cipher suite with "high" encryption.
4485 Note that the peer must support the selected property, or the negotiation
4486 will fail.
4487  
4488  
4489 Option: openssl-method=string
4490 Aliases: method=string
4491  
4492 Type: STRING
4493 Option group: OPENSSL
4494 Phase: SPEC
4495 Platforms: (depends on openssl installation)
4496  
4497 Sets the protocol version to be used. Valid strings (not case sensitive) are:
4498 SSLv2 Select SSL protocol version 2.
4499 SSLv3 Select SSL protocol version 3.
4500 SSLv23 Select SSL protocol version 2 or 3. This is the default when
4501 this option is not provided.
4502 TLSv1 Select TLS protocol version 1.
4503  
4504  
4505 Option: openssl-verify=bool
4506 Aliases: verify=bool
4507  
4508 Type: BOOL
4509 Option group: OPENSSL
4510 Phase: SPEC
4511 Platforms: (depends on openssl installation)
4512  
4513 Controls check of the peer's certificate. Default is 1 (true). Disabling
4514 verify might open your socket for everyone!
4515  
4516  
4517 Option: openssl-certificate=file
4518 Aliases: cert=file
4519  
4520 Type: FILENAME
4521 Option group: OPENSSL
4522 Phase: SPEC
4523 Platforms: (depends on openssl installation)
4524  
4525 Specifies the file with the certificate. The certificate must be
4526 in OpenSSL format (*.pem). With openssl-listen, this option is strongly
4527 recommended: except with cipher aNULL, "no shared ciphers" error might
4528 occur when no certificate is given.
4529  
4530  
4531 Option: openssl-key=file
4532 Aliases: key
4533  
4534 Type: FILENAME
4535 Option group: OPENSSL
4536 Phase: SPEC
4537 Platforms: (depends on openssl installation)
4538  
4539 Specifies the file with the private key. The private key may be in this
4540 file or in the file given with the ref(cert) option. The party that has
4541 to proof that it is the owner of a certificate needs the private key.
4542  
4543  
4544 Option: openssl-cafile=file
4545 Aliases: cafile
4546  
4547 Type: FILENAME
4548 Option group: OPENSSL
4549 Phase: SPEC
4550 Platforms: (depends on openssl installation)
4551  
4552 Specifies the file with the trusted (root) authority certificates. The file
4553 must be in PEM format and should contain one or more certificates.
4554  
4555  
4556 Option: openssl-capath=directory
4557 Aliases: capath
4558  
4559 Type: FILENAME
4560 Option group: OPENSSL
4561 Phase: SPEC
4562 Platforms: (depends on openssl installation)
4563  
4564 Specify the directory with the trusted (root) certificates. The directory
4565 must contain certificates in PEM format and their hashes (see OpenSSL
4566 documentation)
4567  
4568  
4569 Option: openssl-egd=file
4570 Aliases: egd
4571  
4572 Type: FILENAME
4573 Option group: OPENSSL
4574 Phase: SPEC
4575 Platforms: (depends on openssl installation)
4576  
4577 On some systems, openssl requires an explicit source of random data. Specify
4578 the socket name where an entropy gathering daemon like egd provides random
4579 data, e.g. /dev/egd-pool.
4580  
4581  
4582 Option: openssl-pseudo
4583 Aliases: pseudo
4584  
4585 Type: BOOL
4586 Option group: OPENSSL
4587 Phase: SPEC
4588 Platforms: (depends on openssl installation)
4589  
4590 On systems where openssl cannot find an entropy source and where no entropy
4591 gathering daemon can be utilized, this option activates a mechanism for
4592 providing pseudo entropy. This is archieved by taking the current time in
4593 microseconds for feeding the libc pseudo random number generator with an
4594 initial value. openssl is then feeded with output from random calls.
4595 NOTE:This mechanism is not sufficient for generation of secure keys!
4596  
4597  
4598 Option: openssl-fips
4599 Aliases: fips
4600  
4601 Type: BOOL
4602 Option group: BOOL
4603 Phase: SPEC
4604 Platforms: (depends on OpenSSL installation and FIPS implementation)
4605  
4606 Enables FIPS mode if compiled in. For info about the FIPS encryption
4607 implementation standard see http://oss-institute.org/fips-faq.html.
4608 This mode might require that the involved certificates are generated with a
4609 FIPS enabled version of openssl. Setting or clearing this option on one
4610 socat address affects all OpenSSL addresses of this process.
4611  
4612  
4613 Option: openssl-compress
4614 Aliases: compress
4615  
4616 Type: STRING
4617 Option group: OPENSSL
4618 Phase: SPEC
4619 Platforms: (depends on openssl installation)
4620  
4621 Enable or disable the use of compression for a connection. Setting this to
4622 "none" disables compression, setting it to "auto" lets OpenSSL choose the best
4623 available algorithm supported by both parties. The default is to not touch any
4624 compression-related settings.
4625 NOTE: Requires OpenSSL 0.9.8 or higher.
4626 NOTE: Disabling compression with OpenSSL 0.9.8 affects all new connections in
4627 the same process.
4628  
4629  
4630 ===============================================================================
4631 Application specific address options
4632  
4633  
4634 Option: ignoreeof
4635 Aliases: ignoreof
4636  
4637 Type: BOOL
4638 Option group: APPL
4639 Phase: LATE
4640 Platforms: all
4641  
4642 This option has to be supported by the application. For socat it means that an
4643 EOF condition on this data source does not trigger termination procedures, but
4644 instead the read/write loop waits for one second and then tries to read more
4645 input data. This behaviour emulates "tail -f" and might not be useful for all
4646 kinds of input devices, but regular files and /dev/null are good candidates.
4647 Termination of socat then can only occur by EOF condition of the other input
4648 device, an error, or by external events.
4649  
4650  
4651 Option: cr
4652  
4653 Type: CONST
4654 Option group: APPL
4655 Phase: LATE
4656 Platforms: all
4657  
4658 The appropriate data endpoint uses CR ('\r', 0x0d) as line terminator
4659 character. Convert data to and from this stream appropriately.
4660 This is useful for, e.g., modems.
4661  
4662  
4663 Option: crnl
4664 Aliases: crlf
4665  
4666 Type: CONST
4667 Option group: APPL
4668 Phase: LATE
4669 Platforms: all
4670  
4671 The appropriate data endpoint uses CR+LF ("\r\n", 0x0d0a ) as line terminator
4672 string. Convert data to and from this stream appropriately.
4673 This is useful for, e.g., TCP protocols like SMTP and FTP.
4674  
4675  
4676 Option: readbytes=num
4677 Aliases: bytes
4678  
4679 Type: SIZE_T
4680 Option group: APPL
4681 Phase: LATE
4682 Platforms: all
4683  
4684 socat reads only so many bytes from this address (the address provides
4685 only so many bytes for transfer and pretends to be at EOF afterwards).
4686  
4687  
4688 Option: lockfile=filename
4689  
4690 Type: FILENAME
4691 Option group: APPL
4692 Phase: INIT
4693 Platforms: all
4694  
4695 If lockfile exists, exits with error. If lockfile does not exist, creates it
4696 and continues; removes lockfile on exit.
4697  
4698  
4699 Option: waitlock=filename
4700  
4701 Type: FILENAME
4702 Option group: APPL
4703 Phase: INIT
4704 Platforms: all
4705  
4706 If lockfile exists, waits until it disappears. When lockfile does not exist,
4707 creates it and continues; removes lockfile on exit.
4708  
4709 ===============================================================================
4710 RETRY options
4711  
4712 Option: retry=<num>
4713  
4714 Type: UINT
4715 Option group: RETRY
4716 Phase: INIT
4717 Platforms: all
4718  
4719 Number of retries before the connection or listen attempt is aborted.
4720 Default is 0, which means just one attempt.
4721  
4722  
4723 Option: interval=<double>
4724  
4725 Type: TIMESPEC
4726 Option group: RETRY
4727 Phase: INIT
4728 Platforms: all
4729  
4730 Time between consecutive attempts (seconds). Default is 1 second.
4731  
4732  
4733 Option: forever
4734  
4735 Type: BOOL
4736 Option group: RETRY
4737 Phase: INIT
4738 Platforms: all
4739  
4740 Performs an unlimited number of retry attempts.
4741  
4742 ===============================================================================
4743 EXT2 options
4744  
4745 Option: ext2-secrm=<bool>
4746 Aliases: secrm=<bool>
4747  
4748 Type: BOOL
4749 Option group: REG
4750 Phase: FD
4751 Platforms: Linux
4752  
4753 Sets the secrm file attribute on the file.
4754  
4755  
4756 Option: ext2-unrm=<bool>
4757 Aliases: unrm=<bool>
4758  
4759 Type: BOOL
4760 Option group: REG
4761 Phase: FD
4762 Platforms: Linux
4763  
4764 Sets the unrm file attribute on the file.
4765  
4766  
4767 Option: ext2-compr=<bool>
4768 Aliases: compr=<bool>
4769  
4770 Type: BOOL
4771 Option group: REG
4772 Phase: FD
4773 Platforms: Linux
4774  
4775 Sets the compr file attribute on the file.
4776  
4777  
4778 Option: ext2-sync=<bool>
4779  
4780 Type: BOOL
4781 Option group: REG
4782 Phase: FD
4783 Platforms: all
4784  
4785 Sets the sync file attribute on the file.
4786  
4787  
4788 Option: ext2-immutable=<bool>
4789 Aliases: immutable=<bool>
4790  
4791 Type: BOOL
4792 Option group: REG
4793 Phase: FD
4794 Platforms: Linux
4795  
4796 Sets the immutable file attribute on the file.
4797  
4798  
4799 Option: ext2-append=<bool>
4800  
4801 Type: BOOL
4802 Option group: REG
4803 Phase: FD
4804 Platforms: all
4805  
4806 Sets the append file attribute on the file.
4807  
4808  
4809 Option: ext2-nodump=<bool>
4810 Aliases: nodump=<bool>
4811  
4812 Type: BOOL
4813 Option group: REG
4814 Phase: FD
4815 Platforms: Linux
4816  
4817 Sets the nodump file attribute on the file.
4818  
4819  
4820 Option: ext2-noatime=<bool>
4821  
4822 Type: BOOL
4823 Option group: REG
4824 Phase: FD
4825 Platforms: Linux
4826  
4827 Sets the noatime file attribute on the file.
4828  
4829  
4830 Option: ext2-journal-data=<bool>
4831 Aliases: journal-data=<bool>
4832  
4833 Type: BOOL
4834 Option group: REG
4835 Phase: FD
4836 Platforms: Linux
4837  
4838 Sets the journal-data file attribute on the file.
4839  
4840  
4841 Option: ext2-notail=<bool>
4842 Aliases: notail=<bool>
4843  
4844 Type: BOOL
4845 Option group: REG
4846 Phase: FD
4847 Platforms: none
4848  
4849 Sets the notail file attribute on the file.
4850  
4851  
4852 Option: ext2-dirsync=<bool>
4853 Aliases: dirsync=<bool>
4854  
4855 Type: BOOL
4856 Option group: REG
4857 Phase: FD
4858 Platforms: Linux
4859  
4860 Sets the dirsync file attribute on the file.
4861  
4862  
4863 Option: ext2-topdir=<bool>
4864 Aliases: topdir=<bool>
4865  
4866 Type: BOOL
4867 Option group: REG
4868 Phase: FD
4869 Platforms: Linux
4870  
4871 Sets the topdir file attribute on the file.
4872  
4873  
4874 ===============================================================================
4875  
4876 Appendix: generating a sandbox (chroot environment)
4877  
4878 While it is possible to generate a sandbox almost anywhere in the file system,
4879 I recommend to use a file system that has been mounted with restrictions,
4880 especially nosuid and maybe nodev, or even ro.
4881  
4882 You may mount a dedicated file system for the sandbox, so it gets a little
4883 harder for the guests to determine for sure if they are within a sandbox when
4884 using "ls -id /"
4885  
4886 The following desribes typical steps for generating a sandbox. Depending on
4887 your operating system, application, and security requirements, your mileage may
4888 vary. With the below steps, you will be able to run some check programs to play
4889 around with the sandbox.
4890  
4891 I Installation
4892 1) Create a sandbox group - but give it and all following "sandbox" ids a more
4893 cryptic name!
4894 2) Create a sandbox user, only in sandbox group. If this user must never login,
4895 give it a useless shell like /bin/false
4896 3) Check the sandbox home directory (e.g. /home/sandbox) and save and remove
4897 all .profile, public_html/ etc.
4898 4) Optionally mount a new file system over the new home directory
4899 5) Generate subdirectories bin, lib, etc, usr, usr/bin, usr/lib.
4900 Set their permissions and ownership equal to the original directories (or use
4901 only root.root)
4902 6) Generate subdirectory home/sandbox (or similarly; like sandbox home)
4903 7) Generate etc/passwd with users sandbox and root, but do not store original
4904 password hashes there!
4905 8) Generate etc/group with only groups sandbox and root (or system on AIX)
4906 9) Copy test programs and utilities to bin, e.g. su, id, ls, mount, strace (but
4907 without SUID/SGID)
4908 10) Copy the required shared libraries and the shared library loader to their
4909 directories.
4910 On Linux, e.g. /lib/ld-linux.so.2, /lib/libnss_compat.so.2
4911 Note: it is often difficult to find out what shared libraries are (still) not
4912 installed in the sandbox. The programs invoked in the sandbox typically do not
4913 give useful error messages. If chroot's exec call gives an error like "no such
4914 file or directory", and you do not know if it even found the program itself,
4915 then remove the test programs execute permission; the error message should
4916 change to "execute permission denied" or so. Redo the execute permissions and
4917 look for the shared libraries...
4918 List required libraries of a program:
4919 Linux: ldd <program>
4920 AIX: xdb <program>
4921 map
4922  
4923 11) For testing purposes, install id, ls, su, mount, strace, and maybe sh in
4924 the sandbox. Test it.
4925  
4926 II Customization
4927 12) Copy your applications, configuration files, and data to the appropriate
4928 directories within the sandbox.
4929 Test function of the application in the sandbox, and add missing files and
4930 libraries. If an application program gets killed immediately after start, it
4931 might miss a shared library.
4932  
4933 III Cleanup, check
4934 13) Implement your own tricks how to improve security of the sandbox
4935 14) Remove test programs like bin/sh, id, ls, mount, strace
4936  
4937  
4938 ===============================================================================
4939 socket types, modes and their security features:
4940 IP.v4.TCP.connect
4941 IP.v4.TCP.listen range tcpwrap srcport lowport
4942 IP.v4.UDP.connect
4943 IP.v4.UDP.listen range tcpwrap srcport lowport
4944 IP.v4.UDP.sendto
4945 IP.v4.UDP.recvfrom range tcpwrap srcport lowport
4946 IP.v4.UDP.recv range tcpwrap srcport lowport
4947 IP.v4.raw.sendto
4948 IP.v4.raw.recvfrom range tcpwrap
4949 IP.v4.raw.recv range tcpwrap
4950 IP.v6.TCP.connect
4951 IP.v6.TCP.listen range tcpwrap srcport lowport
4952 IP.v6.UDP.connect
4953 IP.v6.UDP.listen range tcpwrap srcport lowport
4954 IP.v6.UDP.sendto
4955 IP.v6.UDP.recvfrom range tcpwrap srcport lowport
4956 IP.v6.UDP.recv range tcpwrap srcport lowport
4957 IP.v6.raw.sendto
4958 IP.v6.raw.recvfrom range tcpwrap
4959 IP.v6.raw.recv srcport lowport
4960 UNIX.stream.connect
4961 UNIX.stream.listen
4962 UNIX.dgram.sendto
4963 UNIX.dgram.recvfrom
4964 UNIX.dgram.recv
4965 OPENSSL.connect
4966 OPENSSL.TCP4.listen range tcpwrap srcport lowport
4967 OPENSSL.TCP6.listen range tcpwrap srcport lowport
4968  
4969 ===============================================================================
4970 Missing features and Caveats:
4971  
4972 . no support for SIGIO mechanism
4973 . no support for socket ancillary messages
4974 . Probably many ioctls not implemented due to missing documentation
4975 . only limited implementation of raw sockets and interfaces,
4976 . no support for high level sockets beyond UNIX, INET, and INET6 domains