summaryrefslogtreecommitdiff
path: root/man/1/listen
diff options
context:
space:
mode:
Diffstat (limited to 'man/1/listen')
-rw-r--r--man/1/listen237
1 files changed, 237 insertions, 0 deletions
diff --git a/man/1/listen b/man/1/listen
new file mode 100644
index 00000000..4234ad49
--- /dev/null
+++ b/man/1/listen
@@ -0,0 +1,237 @@
+.TH LISTEN 1
+.SH NAME
+listen, styxlisten, dial \- network connections
+.SH SYNOPSIS
+.B listen
+[
+.B -Ats
+] [
+.B -a
+.I alg
+]... [
+.B -k
+.I keyfile
+] [
+.B -i
+.BI { initscript }
+]
+.I addr
+.I command
+[
+.IR arg ...
+]
+.br
+.B styxlisten
+[
+.B -Ats
+] [
+.B -a
+.I alg
+]... [
+.B -k
+.I keyfile
+]
+.I addr
+.I command
+[
+.IR arg ...
+]
+.br
+.B dial
+[
+.B -A
+] [
+.B -a
+.I alg
+] [
+.B -k
+.I keyfile
+]
+.I addr
+.I command
+[
+.IR arg ...
+]
+.SH DESCRIPTION
+.I Listen
+waits for an incoming network connection on
+.IR addr ,
+(as accepted by
+.B announce
+in
+.IR sys-dial (2))
+and then invokes
+.IR sh (1)
+to run the associated
+.IR command .
+If the
+.B -A
+option is specified, no authentication or encryption will
+take place on the connection; otherwise
+.I listen
+will attempt to authenticate the party at the other
+end of the connection, allowing any given
+.I alg
+to be used to encrypt and/or digest the
+connection's data. If neither
+.B -A
+or any
+.B -a
+option is given, then
+.I listen
+will allow any algorithm allowed by the local
+.IR ssl (3)
+device.
+If
+.I keyfile
+is specified, then that will be used as the server's certificate;
+otherwise
+.BI /usr/ user /keyring/default
+will be used.
+.PP
+If an
+.I initscript
+is provided, it is executed by each listener
+after announcing its network connection,
+with the shell variable
+.B net
+set to the name of the corresponding network directory
+(see
+.IR sys-dial (2)),
+before listening for incoming calls.
+This can be used to change, or find out the characteristics
+of an announced port (for instance to find out
+the actual port number that has been announced).
+.PP
+By default,
+.I listen
+backgrounds itself (after checking that the port
+announcement proceeded ok); giving it the
+.B -s
+option causes it to run synchronously.
+.PP
+.I Listen
+currently makes available the whole of its current name space visible to the command,
+which might be undesirable, and perhaps should be optional, with a new name space
+constructed for an incoming call.
+The
+.B -t
+option declares the command to be `trusted' giving it access to
+elements of the current name space such as
+.B /mnt/keys
+on an authentication server.
+By default it has not got that access.
+.PP
+.I Styxlisten
+is similar to
+.IR listen ,
+except that it multiplexes a single
+.I styx
+(see
+.IR intro (5))
+server between multiple clients.
+.I Styxlisten
+starts its
+.I cmd
+only once; it assumes it will serve styx messages
+through file descriptor 0 when started. For each client that attaches to
+.IR address ,
+the command will see a new
+.IR attach (5)
+message indicating the new connection.
+Unless the
+.B -A
+option has been given, the
+.B uname
+field in the attach message will be the name of the
+authenticated user.
+When the command exits, the process listening
+on
+.I address
+is stopped.
+.PP
+.I Dial
+is the complement of
+.IR listen .
+It tries to make a connection to
+.IR addr .
+If the
+.B -A
+option is given, no authentication or encryption will
+take place; otherwise Inferno authentication and encryption
+will be performed as usual, using
+.I alg
+if given, or a default algorithm otherwise.
+.I Keyfile
+is used for the certificate if given, otherwise
+.BI /usr/ user /keyring/ addr\fR,\fP
+if it exists, and failing that,
+.BI /usr/ user /keyring/default\fR.\fP
+.I Alg
+is used for the encryption/digest algorithm
+on the connection.
+When the connection is made,
+.I command
+is run in the context of that connection, as described below.
+.PP
+For both
+.I dial
+and
+.IR listen ,
+when the command is run,
+.B $user
+is set to the name of the authenticated user at the other
+end of the connection (if authentication
+is being used), and
+.B $net
+is set to the
+.B /net
+directory corresponding to the connection.
+The standard input and output of the command
+is redirected to the network connection (standard
+error is unaffected).
+.SH EXAMPLES
+Run a custom login daemon and an echo server that
+logs incoming connections:
+.IP
+.EX
+listen 'tcp!*!echo' {
+ echo connection from `{cat $net/remote} >[1=2]
+ echo user is $user >[1=2]
+ cat &
+}
+.EE
+.PP
+Dial up the above echo server:
+.IP
+.EX
+dial tcp!somehost!echo {
+ echo made connection >[1=2]; echo hello; cat >[1=2]
+}
+.EE
+.PP
+Make the current name-space available to all:
+.IP
+.EX
+styxlisten 'tcp!*!styx' export /
+.EE
+.SH SOURCE
+.B /appl/cmd/dial.b
+.br
+.B /appl/cmd/listen.b
+.SH BUGS
+The way that
+.I styxlisten
+is implemented means that the
+.B aname
+from the remote
+.IR mount (2)
+request cannot be passed through to the
+attach message seen by the command that
+has been started by
+.IR styxlisten .
+.SH "SEE ALSO"
+.IR svc (8),
+.IR sys-dial (2),
+.IR auth (6),
+.IR ssl (3)