LISTEN(1)                                               LISTEN(1)

     NAME
          listen, dial - network connections

     SYNOPSIS
          listen [ -A ] [ -a alg ]... [ -f keyfile ] [ -i {initscript}
          ] [ addr {command} ]...
          dial [ -A ] [ -a alg ] [ -f keyfile ] addr {command}

     DESCRIPTION
          Listen waits for an incoming network connection on any given
          addr, (as accepted by announce in sys-dial(2)) and then
          invokes sh(1) to run the associated command. If the -A
          option is specified, no authentication or encryption will
          take place on the connection; otherwise listen will attempt
          to authenticate the party at the other end of the connec-
          tion, allowing any given alg to be used to encrypt and/or
          digest the connection's data.. If neither -A or any -a
          option is given, then listen will allow any algorithm
          allowed by the local ssl(3) device.  If keyfile is speci-
          fied, then it will be used as the server's certificate; oth-
          erwise /usr/user/keyring/default will be used.  If an
          initscript is provided, it is executed by each listener
          after announcing its network connection, with the shell
          variable net set to the name of the corresponding network
          directory (see sys-dial(2)), before listening for incoming
          calls.

          Dial is the complement of listen. It tries to make a connec-
          tion to addr. If the -A option is given, no authentication
          or encryption will take place; otherwise Inferno authentica-
          tion and encryption will be performed as usual, using alg if
          given, or a default algorithm otherwise.  Keyfile is used
          for the certificate if given, otherwise
          /usr/user/keyring/addr, if it exists, and failing that,
          /usr/user/keyring/default.  Alg is used for the
          encryption/digest algorithm on the connection.  When the
          connection is made, command is run in the context of that
          connection, as described below.

          For both dial and listen, when the command is run, $user is
          set to the name of the authenticated user at the other end
          of the connection (if authentication is being used), and
          $net is set to the /net directory corresponding to the con-
          nection.  The standard input and output of the command is
          redirected to the network connection (standard error is
          unaffected).

     EXAMPLE
          Run a custom login daemon and an echo server that logs
          incoming connections:

     Page 1                       Plan 9             (printed 3/28/24)

     LISTEN(1)                                               LISTEN(1)

          listen (
               'tcp!*!echo' {
                    echo got connection from `{cat $net/remote} >[1=2]
                    cat
               }
               'tcp!*!inflogin' {
                    customlogind
               }
          )
          Dial up the above echo server:
          dial tcp!somehost!echo {echo made connection >[1=2]; echo hello}

     SOURCE
          /appl/cmd/listen.b

     SEE ALSO
          srv(8), sys-dial(2)

     Page 2                       Plan 9             (printed 3/28/24)