1ZSHTCPSYS(1)                General Commands Manual               ZSHTCPSYS(1)
2
3
4

NAME

6       zshtcpsys - zsh tcp system
7

DESCRIPTION

9       A  module  zsh/net/tcp  is  provided to provide network I/O over TCP/IP
10       from within the shell; see its description  in  zshmodules(1)  .   This
11       manual  page  describes  a  function suite based on the module.  If the
12       module is installed, the functions are usually installed  at  the  same
13       time,  in  which  case  they  will  be available for autoloading in the
14       default function search path.  In addition to the  zsh/net/tcp  module,
15       the  zsh/zselect  module  is  used to implement timeouts on read opera‐
16       tions.  For troubleshooting tips, consult the corresponding advice  for
17       the zftp functions described in zshftpsys(1) .
18
19       There  are  functions  corresponding  to the basic I/O operations open,
20       close, read and send, named  tcp_open  etc.,  as  well  as  a  function
21       tcp_expect  for pattern match analysis of data read as input.  The sys‐
22       tem makes it easy to receive data from and send data to multiple  named
23       sessions  at once.  In addition, it can be linked with the shell's line
24       editor in such a way that input data is automatically shown at the ter‐
25       minal.   Other  facilities  available  including logging, filtering and
26       configurable output prompts.
27
28       To use the system where  it  is  available,  it  should  be  enough  to
29       `autoload  -U tcp_open' and run tcp_open as documented below to start a
30       session.  The tcp_open function will autoload the remaining functions.
31

TCP USER FUNCTIONS

33   Basic I/O
34       tcp_open [-qz] host port [ sess ]
35       tcp_open [-qz] [ -s sess | -l sess,... ] ...
36       tcp_open [-qz] [-a fd | -f fd ] [ sess ]
37              Open a new session.  In the first and simplest form, open a  TCP
38              connection to host host at port port; numeric and symbolic forms
39              are understood for both.
40
41              If sess is given, this becomes the name of the session which can
42              be used to refer to multiple different TCP connections.  If sess
43              is not given, the function will  invent  a  numeric  name  value
44              (note  this  is not the same as the file descriptor to which the
45              session is attached).  It is recommended that session names  not
46              include  `funny'  characters,  where  funny  characters  are not
47              well-defined but  certainly  do  not  include  alphanumerics  or
48              underscores, and certainly do include whitespace.
49
50              In  the second case, one or more sessions to be opened are given
51              by name.  A  single  session  name  is  given  after  -s  and  a
52              comma-separated  list  after -l; both options may be repeated as
53              many times as necessary.  The host and port are  read  from  the
54              file .ztcp_sessions in the same directory as the user's zsh ini‐
55              tialisation files, i.e. usually the home directory, but $ZDOTDIR
56              if  that  is set.  The file consists of lines each giving a ses‐
57              sion name and the corresponding host and  port,  in  that  order
58              (note  the  session  name  comes  first, not last), separated by
59              whitespace.
60
61              The third form allows passive and fake TCP connections.  If  the
62              option  -a  is  used, its argument is a file descriptor open for
63              listening for connections.  No function front-end is provided to
64              open  such  a file descriptor, but a call to `ztcp -l port' will
65              create one with the file  descriptor  stored  in  the  parameter
66              $REPLY.   The listening port can be closed with `ztcp -c fd'.  A
67              call to `tcp_open -a fd' will block until a remote  TCP  connec‐
68              tion  is  made  to  port on the local machine.  At this point, a
69              session is created in the usual way  and  is  largely  indistin‐
70              guishable  from  an  active  connection  created with one of the
71              first two forms.
72
73              If the option -f is used, its  argument  is  a  file  descriptor
74              which  is  used  directly as if it were a TCP session.  How well
75              the remainder of the TCP function system copes with this depends
76              on what actually underlies this file descriptor.  A regular file
77              is likely to be unusable; a FIFO (pipe) of some sort  will  work
78              better,  but  note  that it is not a good idea for two different
79              sessions to attempt to read from the same FIFO at once.
80
81              If the option -q is given with any of the three forms,  tcp_open
82              will  not  print informational messages, although it will in any
83              case exit with an appropriate status.
84
85              If the line editor (zle) is in use, which is typically the  case
86              if  the shell is interactive, tcp_open installs a handler inside
87              zle which will check for new data at the same time as it  checks
88              for keyboard input.  This is convenient as the shell consumes no
89              CPU time while waiting; the test is performed by  the  operating
90              system.   Giving  the  option -z to any of the forms of tcp_open
91              prevents the handler from being installed, so data must be  read
92              explicitly.   Note, however, this is not necessary for executing
93              complete sets of send and read commands from a function, as  zle
94              is not active at this point.  Generally speaking, the handler is
95              only active when the shell is waiting for  input  at  a  command
96              prompt or in the vared builtin.  The option has no effect if zle
97              is not active; `[[ -o zle]]' will test for this.
98
99              The first session to be opened becomes the current  session  and
100              subsequent calls to tcp_open do not change it.  The current ses‐
101              sion is stored in the parameter $TCP_SESS; see  below  for  more
102              detail about the parameters used by the system.
103
104       tcp_close [-qn] [ -a | -l sess,... | sess ... ]
105              Close  the  named  sessions,  or  the current session if none is
106              given, or all open sessions if -a is given.  The options -l  and
107              -s  are both handled for consistency with tcp_open, although the
108              latter is redundant.
109
110              If the session being closed is the  current  one,  $TCP_SESS  is
111              unset,  leaving no current session, even if there are other ses‐
112              sions still open.
113
114              If the session was opened with tcp_open -f, the file  descriptor
115              is  closed  so  long  as  it  is  in the range 0 to 9 accessible
116              directly from the command line.  If the option -n is  given,  no
117              attempt  will  be  made  to close file descriptors in this case.
118              The -n option is not used for genuine  ztcp  session;  the  file
119              descriptors are always closed with the session.
120
121              If  the  option  -q  is given, no informational messages will be
122              printed.
123
124       tcp_read [-bdq] [ -t TO ] [ -T TO ]
125           [ -a | -u fd ... | -l sess,... | -s sess ...]
126              Perform a read operation on the current session, or on a list of
127              sessions  if  any  are given with -u, -l or -s, or all open ses‐
128              sions if the option -a is given.   Any  of  the  -u,  -l  or  -s
129              options may be repeated or mixed together.  The -u option speci‐
130              fies a file descriptor directly (only those managed by this sys‐
131              tem are useful), the other two specify sessions as described for
132              tcp_open above.
133
134              The function checks for new data available on all  the  sessions
135              listed.   Unless the -b option is given, it will not block wait‐
136              ing for new data.  Any one line of data from any of  the  avail‐
137              able  sessions  will be read, stored in the parameter $TCP_LINE,
138              and displayed to standard output unless $TCP_SILENT  contains  a
139              non-empty  string.   When  printed to standard output the string
140              $TCP_PROMPT will be shown at the start of the line; the  default
141              form  for this includes the name of the session being read.  See
142              below for more information on these parameters.  In  this  mode,
143              tcp_read  can  be  called  repeatedly  until it returns status 2
144              which indicates all pending input from  all  specified  sessions
145              has been handled.
146
147              With the option -b, equivalent to an infinite timeout, the func‐
148              tion will block until a line is available to read  from  one  of
149              the   specified  sessions.   However,  only  a  single  line  is
150              returned.
151
152              The option  -d  indicates  that  all  pending  input  should  be
153              drained.   In  this  case tcp_read may process multiple lines in
154              the manner given above; only the last is  stored  in  $TCP_LINE,
155              but the complete set is stored in the array $tcp_lines.  This is
156              cleared at the start of each call to tcp_read.
157
158              The options -t and -T specify a timeout in seconds, which may be
159              a  floating  point  number  for increased accuracy.  With -t the
160              timeout is applied before each line read.  With -T, the  timeout
161              applies  to  the  overall operation, possibly including multiple
162              read operations if  the  option  -d  is  present;  without  this
163              option, there is no distinction between -t and -T.
164
165              The  function  does not print informational messages, but if the
166              option -q is given, no error message is printed for a  non-exis‐
167              tent session.
168
169              A return value of 2 indicates a timeout or no data to read.  Any
170              other non-zero return value indicates some error condition.
171
172              See tcp_log for how to control where data is sent by tcp_read.
173
174       tcp_send [-nq] [ -s sess | -l sess,... ] data ...
175       tcp_send [-nq] -a data ...
176              Send the supplied data strings to all the specified sessions  in
177              turn.  The underlying operation differs little from a `print -r'
178              to the session's file descriptor, although it attempts  to  pre‐
179              vent  the  shell  from  dying  owing  to  a SIGPIPE caused by an
180              attempt to write to a defunct session.
181
182              The option -n prevents tcp_send from putting a  newline  at  the
183              end of the data strings.
184
185              The remaining options all behave as for tcp_read.
186
187              The data arguments are not further processed once they have been
188              passed to tcp_send; they are simply passed down to print -r.
189
190              If the parameter $TCP_OUTPUT is a non-empty string  and  logging
191              is  enabled then the data sent to each session will be echoed to
192              the log file(s) with $TCP_OUTPUT  in  front  where  appropriate,
193              much in the manner of $TCP_PROMPT.
194
195   Session Management
196       tcp_alias [-q] alias=sess ...
197       tcp_alias [-q] [ alias ] ...
198       tcp_alias -d [-q] alias ...
199              This function is not particularly well tested.
200
201              The  first  form  creates an alias for a session name; alias can
202              then be used to refer to the existing  session  sess.   As  many
203              aliases may be listed as required.
204
205              The  second  form lists any aliases specified, or all aliases if
206              none.
207
208              The third form deletes all the aliases listed.   The  underlying
209              sessions are not affected.
210
211              The  option  -q  suppresses  an  inconsistently chosen subset of
212              error messages.
213
214       tcp_log [-asc] [ -n | -N ] [ logfile ]
215              With an argument logfile, all future input from tcp_read will be
216              logged  to  the  named  file.  Unless -a (append) is given, this
217              file will first be truncated or created empty.   With  no  argu‐
218              ments, show the current status of logging.
219
220              With  the option -s, per-session logging is enabled.  Input from
221              tcp_read is output to the file logfile.sess.  As the session  is
222              automatically  discriminated  by  the filename, the contents are
223              raw  (no  $TCP_PROMPT).   The  option   -a  applies  as   above.
224              Per-session  logging and logging of all data in one file are not
225              mutually exclusive.
226
227              The option -c closes all logging, both complete and  per-session
228              logs.
229
230              The options -n and -N respectively turn off or restore output of
231              data read by tcp_read to standard output;  hence  `tcp_log  -cn'
232              turns off all output by tcp_read.
233
234              The  function  is  purely  a convenient front end to setting the
235              parameters  $TCP_LOG,  $TCP_LOG_SESS,  $TCP_SILENT,  which   are
236              described below.
237
238       tcp_rename old new
239              Rename  session  old  to  session  new.   The  old  name becomes
240              invalid.
241
242       tcp_sess [ sess [ command  ... ] ]
243              With no arguments, list all the  open  sessions  and  associated
244              file  descriptors.   The  current session is marked with a star.
245              For  use  in  functions,  direct  access   to   the   parameters
246              $tcp_by_name,  $tcp_by_fd  and $TCP_SESS is probably more conve‐
247              nient; see below.
248
249              With a sess argument, set the current session to sess.  This  is
250              equivalent to changing $TCP_SESS directly.
251
252              With  additional  arguments, temporarily set the current session
253              while executing the string command ....  The first  argument  is
254              re-evaluated  so  as  to  expand aliases etc., but the remaining
255              arguments are passed through as the  appear  to  tcp_sess.   The
256              original session is restored when tcp_sess exits.
257
258   Advanced I/O
259       tcp_command send-options ... send-arguments ...
260              This  is  a convenient front-end to tcp_send.  All arguments are
261              passed to tcp_send, then the function pauses waiting  for  data.
262              While data is arriving at least every $TCP_TIMEOUT (default 0.3)
263              seconds, data is handled and printed out according to  the  cur‐
264              rent settings.  Status 0 is always returned.
265
266              This  is  generally  only useful for interactive use, to prevent
267              the display becoming fragmented by output returned from the con‐
268              nection.   Within a programme or function it is generally better
269              to handle reading data by a more explicit method.
270
271       tcp_expect [ -q ] [ -p var ] [ -t  to | -T TO]
272           [ -a | -s sess ... | -l sess,... ] pattern ...
273              Wait for input matching any of the given patterns  from  any  of
274              the  specified  sessions.   Input is ignored until an input line
275              matches one of the given patterns; at this point status zero  is
276              returned, the matching line is stored in $TCP_LINE, and the full
277              set of lines read during the call to tcp_expect is stored in the
278              array $tcp_expect_lines.
279
280              Sessions  are specified in the same way as tcp_read: the default
281              is to use the current session, otherwise the sessions  specified
282              by -a, -s, or -l are used.
283
284              Each  pattern  is a standard zsh extended-globbing pattern; note
285              that it needs to be quoted to avoid it  being  expanded  immedi‐
286              ately  by  filename generation.  It must match the full line, so
287              to match a substring there must be a `*' at the start  and  end.
288              The  line  matched  against  includes  the  $TCP_PROMPT added by
289              tcp_read.  It is possible to include the globbing flags `#b'  or
290              `#m'  in  the  patterns  to make backreferences available in the
291              parameters $MATCH, $match, etc., as described in  the  base  zsh
292              documentation on pattern matching.
293
294              Unlike tcp_read, the default behaviour of tcp_expect is to block
295              indefinitely until the required input is  found.   This  can  be
296              modified  by  specifying a timeout with -t or -T; these function
297              as in  tcp_read,  specifying  a  per-read  or  overall  timeout,
298              respectively,  in  seconds, as an integer or floating-point num‐
299              ber.  As tcp_read, the function returns status 2  if  a  timeout
300              occurs.
301
302              The  function  returns  as soon as any one of the patterns given
303              match.  If the caller  needs  to  know  which  of  the  patterns
304              matched,  the  option -p var can be used; on return, $var is set
305              to the number of the pattern using ordinary zsh  indexing,  i.e.
306              the  first  is 1, and so on.  Note the absence of a `$' in front
307              of var.  To avoid  clashes,  the  parameter  cannot  begin  with
308              `_expect'.
309
310              The option -q is passed directly down to tcp_read.
311
312              As  all  input  is  done via tcp_read, all the usual rules about
313              output of lines read apply.  One exception is that the parameter
314              $tcp_lines  will  only  reflect  the  line  actually  matched by
315              tcp_expect; use $tcp_expect_lines for the full set of lines read
316              during the function call.
317
318       tcp_proxy
319              This  is a simple-minded function to accept a TCP connection and
320              execute  a  command  with  I/O  redirected  to  the  connection.
321              Extreme  caution should be taken as there is no security whatso‐
322              ever and this can leave your computer open to the  world.   Ide‐
323              ally, it should only be used behind a firewall.
324
325              The first argument is a TCP port on which the function will lis‐
326              ten.
327
328              The remaining arguments give a command and its arguments to exe‐
329              cute  with  standard  input,  standard output and standard error
330              redirected to the file descriptor on which the TCP  session  has
331              been  accepted.   If  no command is given, a new zsh is started.
332              This gives everyone  on  your  network  direct  access  to  your
333              account, which in many cases will be a bad thing.
334
335              The  command  is  run  in  the background, so tcp_proxy can then
336              accept new connections.  It continues to accept new  connections
337              until interrupted.
338
339       tcp_spam [-ertv] [ -a | -s  sess | -l sess,... ] cmd ...
340              Execute  `cmd ...' for each session in turn.  Note this executes
341              the command and arguments; it does not send the command line  as
342              data unless the -t (transmit) option is given.
343
344              The sessions may be selected explicitly with the standard -a, -s
345              or -l options, or may be chosen  implicitly.   If  none  of  the
346              three  options  is  given  the  rules  are:  first, if the array
347              $tcp_spam_list is set, this is taken as the  list  of  sessions,
348              otherwise all sessions are taken.  Second, any sessions given in
349              the array $tcp_no_spam_list are removed from the  list  of  ses‐
350              sions.
351
352              Normally,  any  sessions added by the `-a' flag or when all ses‐
353              sions are chosen implicitly are  spammed  in  alphabetic  order;
354              sessions  given  by  the  $tcp_spam_list array or on the command
355              line are spammed in the order given.  The -r flag  reverses  the
356              order however it was arrived it.
357
358              The  -v  flag specifies that a $TCP_PROMPT will be output before
359              each session.  This is output after any modification to TCP_SESS
360              by   the  user-defined  tcp_on_spam  function  described  below.
361              (Obviously that function is able to generate its own output.)
362
363              If the option -e is present, the line given as cmd ...  is  exe‐
364              cuted  using  eval, otherwise it is executed without any further
365              processing.
366
367       tcp_talk
368              This is a fairly simple-minded attempt to  force  input  to  the
369              line editor to go straight to the default TCP_SESSION.
370
371              An  escape  string,  $TCP_TALK_ESCAPE,  default  `:', is used to
372              allow access to normal shell operation.  If it is on its own  at
373              the  start of the line, or followed only by whitespace, the line
374              editor returns to normal operation.  Otherwise, the  string  and
375              any  following  whitespace  are skipped and the remainder of the
376              line executed as shell input without any change of the line edi‐
377              tor's operating mode.
378
379              The current implementation is somewhat deficient in terms of use
380              of the command history.  For this reason, many users will prefer
381              to use some form of alternative approach for sending data easily
382              to the current session.  One simple approach is  to  alias  some
383              special character (such as `%') to `tcp_command --'.
384
385       tcp_wait
386              The  sole  argument is an integer or floating point number which
387              gives the seconds to delay.  The shell will do nothing for  that
388              period  except  wait  for  input  on all TCP sessions by calling
389              tcp_read -a.  This is similar to the  interactive  behaviour  at
390              the command prompt when zle handlers are installed.
391
392   `One-shot' file transfer
393       tcp_point port
394       tcp_shoot host port
395              This  pair  of functions provide a simple way to transfer a file
396              between two hosts within the shell.  Note,  however,  that  bulk
397              data  transfer is currently done using cat.  tcp_point reads any
398              data arriving at port and sends it to standard output; tcp_shoot
399              connects  to  port  on  host  and sends its standard input.  Any
400              unused port may be used; the standard mechanism  for  picking  a
401              port  is to think of a random four-digit number above 1024 until
402              one works.
403
404              To transfer a file from  host  woodcock  to  host  springes,  on
405              springes:
406
407                     tcp_point 8091 >output_file
408
409              and on woodcock:
410
411                     tcp_shoot springes 8091 <input_file
412
413              As  these  two functions do not require tcp_open to set up a TCP
414              connection first, they may need to be autoloaded separately.
415

TCP USER-DEFINED FUNCTIONS

417       Certain functions, if defined by the user, will be called by the  func‐
418       tion  system  in certain contexts.  This facility depends on the module
419       zsh/parameter, which is usually available in interactive shells as  the
420       completion  system  depends  on  it.   None  of  the  functions need be
421       defined; they simply provide convenient hooks when necessary.
422
423       Typically, these are called after the requested action has been  taken,
424       so that the various parameters will reflect the new state.
425
426       tcp_on_alias alias fd
427              When  an alias is defined, this function will be called with two
428              arguments: the name of the alias, and the file descriptor of the
429              corresponding session.
430
431       tcp_on_close sess fd
432              This  is  called with the name of a session being closed and the
433              file descriptor which corresponded to that session.   Both  will
434              be invalid by the time the function is called.
435
436       tcp_on_open sess fd
437              This  is  called  after  a new session has been defined with the
438              session name and file descriptor as arguments.
439
440       tcp_on_rename oldsess fd newsess
441              This is called after a session has been renamed with  the  three
442              arguments old session name, file descriptor, new session name.
443
444       tcp_on_spam sess command ...
445              This is called once for each session spammed, just before a com‐
446              mand is executed for a session by tcp_spam.  The  arguments  are
447              the  session  name  followed by the command list to be executed.
448              If tcp_spam was called with the option  -t,  the  first  command
449              will be tcp_send.
450
451              This  function  is  called after $TCP_SESS is set to reflect the
452              session to be spammed, but before any use of it is made.   Hence
453              it is possible to alter the value of $TCP_SESS within this func‐
454              tion.  For example, the  session  arguments  to  tcp_spam  could
455              include  extra  information  to be stripped off and processed in
456              tcp_on_spam.
457
458              If the function sets the parameter $REPLY to `done', the command
459              line  is not executed; in addition, no prompt is printed for the
460              -v option to tcp_spam.
461
462       tcp_on_unalias alias fd
463              This is called with the name of an alias and  the  corresponding
464              session's file descriptor after an alias has been deleted.
465

TCP UTILITY FUNCTIONS

467       The  following  functions  are used by the TCP function system but will
468       rarely if ever need to be called directly.
469
470       tcp_fd_handler
471              This is the function installed by tcp_open  for  handling  input
472              from  within the line editor, if that is required.  It is in the
473              format documented for the builtin `zle -F' in zshzle(1) .
474
475              While active, the function sets the parameter TCP_HANDLER_ACTIVE
476              to 1.  This allows shell code called internally (for example, by
477              setting tcp_on_read) to tell if is being called when  the  shell
478              is otherwise idle at the editor prompt.
479
480       tcp_output [ -q ] -P prompt -F fd -S sess
481              This  function  is  used for both logging and handling output to
482              standard output, from within tcp_read  and  (if  $TCP_OUTPUT  is
483              set) tcp_send.
484
485              The  prompt  to use is specified by -P; the default is the empty
486              string.  It can contain:
487              %c     Expands to 1 if the session is the current session,  oth‐
488                     erwise   0.    Used   with  ternary  expresions  such  as
489                     `%(c.-.+)' to output `+' for the current session and  `-'
490                     otherwise.
491
492              %f     Replaced by the session's file descriptor.
493
494              %s     Replaced by the session name.
495
496              %%     Replaced by a single `%'.
497
498              The  option  -q suppresses output to standard output, but not to
499              any log files which are configured.
500
501              The -S and -F options are used to pass in the session  name  and
502              file descriptor for possible replacement in the prompt.
503

TCP USER PARAMETERS

505       Parameters  follow  the  usual  convention  that  uppercase is used for
506       scalars and integers, while lowercase is used for normal  and  associa‐
507       tive  array.  It is always safe for user code to read these parameters.
508       Some parameters may also be set; these are  noted  explicitly.   Others
509       are  included  in this group as they are set by the function system for
510       the user's benefit, i.e. setting them is typically not  useful  but  is
511       benign.
512
513       It  is  often  also useful to make settable parameters local to a func‐
514       tion.  For example, `local TCP_SILENT=1' specifies that data read  dur‐
515       ing  the  function call will not be printed to standard output, regard‐
516       less  of  the  setting  outside   the   function.    Likewise,   `local
517       TCP_SESS=sess'  sets  a  session  for  the  duration of a function, and
518       `local TCP_PROMPT=' specifies that no prompt is used for  input  during
519       the function.
520
521       tcp_expect_lines
522              Array.    The  set  of  lines  read  during  the  last  call  to
523              tcp_expect, including the last ($TCP_LINE).
524
525       tcp_filter
526              Array. May be set directly.  A set of extended globbing patterns
527              which,  if  matched in tcp_output, will cause the line not to be
528              printed to standard output.  The patterns should be  defined  as
529              described  for  the  arguments to tcp_expect.  Output of line to
530              log files is not affected.
531
532       TCP_HANDLER_ACTIVE
533              Scalar.  Set to 1 within tcp_fd_handler to indicate to functions
534              called  recursively  that they have been called during an editor
535              session.  Otherwise unset.
536
537       TCP_LINE
538              The last line read by tcp_read, and hence also tcp_expect.
539
540       TCP_LINE_FD
541              The   file   descriptor   from   which   $TCP_LINE   was   read.
542              ${tcp_by_fd[$TCP_LINE_FD]}  will  give the corresponding session
543              name.
544
545       tcp_lines
546              Array. The set of lines read during the last call  to  tcp_read,
547              including the last ($TCP_LINE).
548
549       TCP_LOG
550              May  be set directly, although it is also controlled by tcp_log.
551              The name of a file to which output from  all  sessions  will  be
552              sent.   The output is proceeded by the usual $TCP_PROMPT.  If it
553              is not an absolute path name, it will follow the user's  current
554              directory.
555
556       TCP_LOG_SESS
557              May  be set directly, although it is also controlled by tcp_log.
558              The prefix for a set of files to which output from each  session
559              separately    will    be    sent;    the    full   filename   is
560              ${TCP_LOG_SESS}.sess.  Output to each file is raw; no prompt  is
561              added.   If  it is not an absolute path name, it will follow the
562              user's current directory.
563
564       tcp_no_spam_list
565              Array.  May be set directly.  See tcp_spam for how this is used.
566
567       TCP_OUTPUT
568              May be set directly.  If a non-empty string, any data sent to  a
569              session  by  tcp_send  will be logged.  This parameter gives the
570              prompt to be used in a file specified by $TCP_LOG but not  in  a
571              file  generated  from  $TCP_LOG_SESS.  The prompt string has the
572              same format as TCP_PROMPT and the same rules for its use apply.
573
574       TCP_PROMPT
575              May be set directly.  Used  as  the  prefix  for  data  read  by
576              tcp_read  which is printed to standard output or to the log file
577              given by $TCP_LOG, if any.  Any `%s', `%f' or `%%' occurring  in
578              the string will be replaced by the name of the session, the ses‐
579              sion's underlying file descriptor,  or  a  single  `%',  respec‐
580              tively.   The  expression `%c' expands to 1 if the session being
581              read is the current session, else 0;  this  is  most  useful  in
582              ternary  expressions such as `%(c.-.+)' which outputs `+' if the
583              session is the current one, else `-'.
584
585       TCP_READ_DEBUG
586              May be set directly.  If this has non-zero length, tcp_read will
587              give some limited diagnostics about data being read.
588
589       TCP_SECONDS_START
590              This value is created and initialised to zero by tcp_open.
591
592              The  functions  tcp_read  and tcp_expect use the shell's SECONDS
593              parameter for their own timing purposes.  If that  parameter  is
594              not  of floating point type on entry to one of the functions, it
595              will create a local parameter SECONDS which  is  floating  point
596              and set the parameter TCP_SECONDS_START to the previous value of
597              $SECONDS.  If the parameter is already  floating  point,  it  is
598              used without a local copy being created and TCP_SECONDS_START is
599              not set.  As the global value is zero, the shell elapsed time is
600              guaranteed to be the sum of $SECONDS and $TCP_SECONDS_START.
601
602              This  can  be  avoided by setting SECONDS globally to a floating
603              point value using `typeset -F SECONDS'; then the  TCP  functions
604              will  never make a local copy and never set TCP_SECONDS_START to
605              a non-zero value.
606
607       TCP_SESS
608              May be set directly.  The current session; must refer to one  of
609              the sessions established by tcp_open.
610
611       TCP_SILENT
612              May  be set directly, although it is also controlled by tcp_log.
613              If of non-zero length, data read by tcp_read will not be written
614              to standard output, though may still be written to a log file.
615
616       tcp_spam_list
617              Array.   May  be set directly.  See the description of the func‐
618              tion tcp_spam for how this is used.
619
620       TCP_TALK_ESCAPE
621              May be set  directly.   See  the  description  of  the  function
622              tcp_talk for how this is used.
623
624       TCP_TIMEOUT
625              May  be  set directly.  Currently this is only used by the func‐
626              tion tcp_command, see above.
627

TCP USER-DEFINED PARAMETERS

629       The following parameters are not set by the function system, but have a
630       special effect if set by the user.
631
632       tcp_on_read
633              This should be an associative array; if it is not, the behaviour
634              is undefined.  Each key is the name of a shell function or other
635              command,  and  the corresponding value is a shell pattern (using
636              EXTENDED_GLOB).  Every line read from a TCP session directly  or
637              indirectly   using   tcp_read  (which  includes  lines  read  by
638              tcp_expect) is  compared  against  the  pattern.   If  the  line
639              matches,  the  command given in the key is called with two argu‐
640              ments: the name of the session from which the line was read, and
641              the line itself.
642
643              If  any function called to handle a line returns a non-zero sta‐
644              tus, the line is not output.  Thus a  tcp_on_read  handler  con‐
645              taining  only the instruction `return 1' can be used to suppress
646              output of particular lines  (see,  however,  tcp_filter  above).
647              However,  the  line  is  still stored in TCP_LINE and tcp_lines;
648              this occurs after all tcp_on_read processing.
649

TCP UTILITY PARAMETERS

651       These parameters are controlled by the function  system;  they  may  be
652       read directly, but should not usually be set by user code.
653
654       tcp_aliases
655              Associative  array.   The  keys are the names of sessions estab‐
656              lished with tcp_open; each value is a  space-separated  list  of
657              aliases which refer to that session.
658
659       tcp_by_fd
660              Associative  array.  The keys are session file descriptors; each
661              value is the name of that session.
662
663       tcp_by_name
664              Associative array.  The keys are the  names  of  sessions;  each
665              value is the file descriptor associated with that session.
666

TCP EXAMPLES

668       Here is a trivial example using a remote calculator.
669
670       TO  create a calculator server on port 7337 (see the dc manual page for
671       quite how infuriating the underlying command is):
672
673              tcp_proxy 7337 dc
674
675       To connect to this from the same host with a session also named `dc':
676
677              tcp_open localhost 7337 dc
678
679       To send a command to the remote session and wait a short while for out‐
680       put (assuming dc is the current session):
681
682              tcp_command 2 4 + p
683
684       To close the session:
685
686              tcp_close
687
688       The  tcp_proxy  needs  to  be killed to be stopped.  Note this will not
689       usually kill any connections which have already been accepted, and also
690       that the port is not immediately available for reuse.
691
692       The  following  chunk  of  code  puts  a list of sessions into an xterm
693       header, with the current session followed by a star.
694
695              print -n "\033]2;TCP:" ${(k)tcp_by_name:/$TCP_SESS/$TCP_SESS\*} "\a"
696

TCP BUGS

698       The function tcp_read uses the shell's normal read  builtin.   As  this
699       reads a complete line at once, data arriving without a terminating new‐
700       line can cause the function to block indefinitely.
701
702       Though the function suite works well for interactive use and  for  data
703       arriving  in  small amounts, the performance when large amounts of data
704       are being exchanged is likely to be extremely poor.
705
706
707
708zsh 4.2.6                      November 28, 2005                  ZSHTCPSYS(1)
Impressum