summaryrefslogtreecommitdiff
path: root/UCSPI
diff options
context:
space:
mode:
Diffstat (limited to 'UCSPI')
-rw-r--r--UCSPI131
1 files changed, 0 insertions, 131 deletions
diff --git a/UCSPI b/UCSPI
deleted file mode 100644
index 07e6db4..0000000
--- a/UCSPI
+++ /dev/null
@@ -1,131 +0,0 @@
-UNIX Client-Server Program Interface, UCSPI-1996
-Copyright 1996
-D. J. Bernstein, djb@pobox.com
-
-
-1. Introduction
-
-This document describes the UNIX Client-Server Program Interface, UCSPI
-(ooks-pie), a command-line interface to client-server communications
-tools.
-
-UCSPI provides several benefits. First, the UCSPI interface is
-independent of the underlying communications medium; UCSPI applications
-don't even have to be recompiled as the Internet upgrades from IPv4 to
-IPv6. Second, UCSPI lets shell scripts take advantage of networking.
-Third, UCSPI clients and servers conventionally set up environment
-variables that display the local and remote addresses, so the
-information is readily available to applications and users.
-
-Here is the general UCSPI framework. An UCSPI tool is a program that
-understands how to talk to some communications medium. It sets up two
-descriptors and then invokes an UCSPI application, which can read from
-one descriptor and write to the other. Every communications medium
-provides reliable two-way full-duplex strictly ordered not necessarily
-timed stream communication. Some media may provide other types of
-communication, such as expedited (``out-of-band'') transmission, in
-which the stream is no longer ordered, but most UCSPI applications are
-medium-independent and do not rely on such features.
-
-
-2. Tools
-
-UCSPI tools are executable programs. They accept command lines in the
-following general format:
-
- [tool] [options] [address] [application]
-
-Here [tool] is the name of the tool, [options] are zero or more option
-arguments, [address] is a protocol-specific address, and [application]
-is a user-specified program to run for each connection.
-
-[options] are processed by the getopt standard; thus an argument of --
-terminates [options]. [tool] supports three options to control how
-much information it prints to stderr:
-
- -v all available messages
- -Q all available error messages; no messages in case of success
- -q no messages in any case
-
-The default is -Q; later arguments override earlier arguments. [tool]
-may support many further options.
-
-[application] consists of one or more arguments, handled by the
-conventions of execvp(). [tool] passes on all [application] arguments
-without change, no matter what characters appear in those arguments.
-
-[tool] always changes certain file descriptors, as described in section
-3, and environment variables, as described in section 4, before
-executing [application].
-
-[tool] might fork before executing [application], and it might reset
-some signals that were previously ignored. Other than this, [tool] does
-not change its process state before executing [application].
-
-[tool] does not assume that any particular descriptors are open or
-closed upon entry. [tool] does not force itself into the background; nor
-does it attempt to detach from a controlling terminal.
-
-If [tool] cannot perform its functions, it exits with a nonzero code.
-
-
-3. Clients and servers
-
-There are two types of UCSPI tools: clients and servers.
-
-An UCSPI client closes descriptors 6 and 7 and connects to a server at
-[address]. Upon connecting, it spawns [application] with descriptor 6
-reading from the connection and descriptor 7 writing to the connection.
-The client does not make any further connections. When [application]
-dies, the client dies; the client exits with a zero code if and only if
-[application] exited with a zero code.
-
-An UCSPI server closes descriptors 0 and 1 and waits for a client to
-connect to [address]. Upon accepting a connection, it spawns
-[application] with descriptor 0 reading from the connection and
-descriptor 1 writing to the connection. Meanwhile, and subsequently, it
-continues accepting connections to [address]. If the server receives
-signal SIGTERM, it exits with code 0; this does not affect any current
-connections.
-
-
-4. Protocols
-
-Each UCSPI tool supports a protocol. A protocol definition provides
-three pieces of information: the name of the protocol; the format and
-meaning of [address]; and the environment variables set up by the tool.
-
-A protocol name is a sequence of one or more alphanumeric characters.
-See section 5 for information about the allocation of protocol names.
-
-A protocol definition always states the number of arguments taken by
-[address] and the allowed form for each argument. It also states an
-underlying communications medium to be used by the tool, and gives the
-interpretation of [address] in terms of that medium.
-
-Each tool passes the following environment variables to [application]:
-PROTO=[PROTO], the name of the supported protocol; zero or more
-variables beginning with [PROTO]LOCAL, as stated in the protocol
-definition; and zero or more variables beginning with [PROTO]REMOTE, as
-stated in the protocol definition. For clients, [PROTO]LOCAL variables
-give information about the client, and [PROTO]REMOTE variables give
-information about the server; vice versa for servers.
-
-Protocol definitions may specify environment variables that, in some
-situations, are not set. Those variables might be set upon entry to an
-UCSPI tool; if so, they must be unset, not passed along.
-
-A protocol definition may impose further requirements on clients and
-servers, such as supported options, forking behavior, and the nature of
-the descriptors passed to [application].
-
-
-5. Protocol management
-
-Public protocol definitions may be registered with me. I may refuse a
-registration request on the grounds of a namespace problem, but in that
-case I will suggest an acceptable replacement name.
-
-Protocol names beginning with x will be parcelled out to organizations
-that would like to define their own protocols. Protocol names beginning
-with X are reserved for experimental use.