summaryrefslogtreecommitdiff
path: root/lib/libxtrans/Xtrans.mm
diff options
context:
space:
mode:
authorMatthieu Herrb <matthieu@cvs.openbsd.org>2009-10-31 20:34:08 +0000
committerMatthieu Herrb <matthieu@cvs.openbsd.org>2009-10-31 20:34:08 +0000
commit1a851c206445bbb29016d2af28393fdfa45c62d7 (patch)
tree13437a11ff14b495e4c5513da0ebdd97399cba07 /lib/libxtrans/Xtrans.mm
parentd102f95642350eb29acafffbaa4414704121537d (diff)
Update to xtrans 1.2.5
Diffstat (limited to 'lib/libxtrans/Xtrans.mm')
-rw-r--r--lib/libxtrans/Xtrans.mm789
1 files changed, 789 insertions, 0 deletions
diff --git a/lib/libxtrans/Xtrans.mm b/lib/libxtrans/Xtrans.mm
new file mode 100644
index 000000000..0d39e7d51
--- /dev/null
+++ b/lib/libxtrans/Xtrans.mm
@@ -0,0 +1,789 @@
+.\" $XFree86: xc/doc/specs/xtrans/Xtrans.mm,v 1.2 2003/07/09 15:27:27 tsi Exp $
+'\".nr Ej 1
+.PH "'''"
+.ce
+\fBX Transport Interface\fR
+.sp
+Copyright (c) 1993, 1994 NCR Corporation - Dayton, Ohio, USA
+.sp
+All Rights Reserved
+.sp
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted, provided
+that the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation, and that the name NCR not be used in advertising
+or publicity pertaining to distribution of the software without specific,
+written prior permission. NCR makes no representations about the
+suitability of this software for any purpose. It is provided "as is"
+without express or implied warranty.
+.sp
+NCR DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+NO EVENT SHALL NCR BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.sp
+Copyright 1993, 1994, 2002 The Open Group
+.sp
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the ``Software''), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+.sp
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+.sp
+THE SOFTWARE IS PROVIDED ``AS IS'', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+.sp
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+.sp
+X Window System is a trademark of The Open Group, Inc.
+.sp
+Designed by Stuart Anderson (NCR) with help from Ralph Mor (X Consortium)
+.sp
+.ce
+\fIDraft Version 0.6\fR
+.sp
+NOTE: This documentation does not completely match the implementation in R6
+(as a result of some late changes made in the code). Specifically, support
+was added for font server cloning, and conditional compliation was introduced
+for client vs. server code.
+.bp
+.H 1 "Purposes and Goals"
+.P
+The X Transport Interface is intended to combine all system and transport
+specific code into a single place in the source tree. This API should be used
+by all libraries, clients and servers of the X Window System. Use of this API
+should allow the addition of new types of transports and support for new
+platforms without making any changes to the source except in the X Transport
+Interface code.
+.P
+This interface should solve the problem of multiple #ifdef TRANSPORT and
+#ifdef PLATFORM statements scattered throughout the source tree.
+.P
+This interface should provide enough functionality to support all types of
+protocols, including connection oriented protocols such as X11 and FS, and
+connection-less oriented protocols such as XDMCP.
+.H 1 "Overview of the interface"
+.P
+The interface provides an API for use by applications. The functions in this
+API perform work that is common to all transports and systems, such as
+parsing an address into a host and port number. The functions in this API
+call transport specific functions that are contained in a table whose
+contents are defined at compile time. This table contains an entry for each
+type of transport. Each entry is a record containing mostly pointers to
+function that implements the interface for the given transport.
+.P
+This API does not provide an abstraction for select() or poll().
+These function are themselves transport independent, so an additional interface
+is not needed for these functions. It is also unclear how such an interface
+would affect performance.
+.H 1 "Definition of Address Specification Format"
+.P
+Addresses are specified in the following syntax,
+.sp
+\fIprotocol/host:port\fR
+.sp
+where \fIprotocol\fR specifies a protocol family or an alias for a protocol
+family. A definition of common protocol families is given in a later section.
+.P
+The \fIhost\fR part specifies the name of a host or other transport dependent
+entity that could be interpreted as a Network Service Access Point (NSAP).
+.P
+The \fIport\fR part specifies the name of a Transport Service Access Point
+(TSAP). The format of the TSAP is defined by the underlying transport
+implementation, but it is represented using a string format when it is part
+of an address.
+.H 1 "Internal Data Structures"
+.P
+There are two major data structures associated with the transport independent
+portion of this interface. Additional data structures may be used internally
+by each transport.
+.H 2 "Xtransport"
+.P
+Each transport supported has an entry in the transport table.
+The transport table is an array of \fIXtransport\fR records. Each record
+contains all the entry points for a single transport. This record is defined as:
+.DS
+.nf
+typedef struct _Xtransport {
+
+ char *TransName;
+ int flags;
+
+ XtransConnInfo (*OpenCOTSClient)(
+ struct _Xtransport *, /* transport */
+ char *, /* protocol */
+ char *, /* host */
+ char * /* port */
+ );
+
+ XtransConnInfo (*OpenCOTSServer)(
+ struct _Xtransport *, /* transport */
+ char *, /* protocol */
+ char *, /* host */
+ char * /* port */
+ );
+
+ XtransConnInfo (*OpenCLTSClient)(
+ struct _Xtransport *, /* transport */
+ char *, /* protocol */
+ char *, /* host */
+ char * /* port */
+ );
+
+ XtransConnInfo (*OpenCLTSServer)(
+ struct _Xtransport *, /* transport */
+ char *, /* protocol */
+ char *, /* host */
+ char * /* port */
+ );
+
+ int (*SetOption)(
+ XtransConnInfo, /* connection */
+ int, /* option */
+ int /* arg */
+ );
+
+ int (*CreateListener)(
+ XtransConnInfo, /* connection */
+ char *, /* port */
+ int /* flags */
+ );
+
+ int (*ResetListener)(
+ XtransConnInfo /* connection */
+ );
+
+ XtransConnInfo (*Accept)(
+ XtransConnInfo /* connection */
+ );
+
+ int (*Connect)(
+ XtransConnInfo, /* connection */
+ char *, /* host */
+ char * /* port */
+ );
+
+ int (*BytesReadable)(
+ XtransConnInfo, /* connection */
+ BytesReadable_t * /* pend */
+ );
+
+ int (*Read)(
+ XtransConnInfo, /* connection */
+ char *, /* buf */
+ int /* size */
+ );
+
+ int (*Write)(
+ XtransConnInfo, /* connection */
+ char *, /* buf */
+ int /* size */
+ );
+
+ int (*Readv)(
+ XtransConnInfo, /* connection */
+ struct iovec *, /* buf */
+ int /* size */
+ );
+
+ int (*Writev)(
+ XtransConnInfo, /* connection */
+ struct iovec *, /* buf */
+ int /* size */
+ );
+
+ int (*Disconnect)(
+ XtransConnInfo /* connection */
+ );
+
+ int (*Close)(
+ XtransConnInfo /* connection */
+ );
+
+} Xtransport;
+
+.fi
+.DE
+.P
+The \fIflags\fR field can contain an OR of the following masks:
+.sp
+\fITRANS_ALIAS\fR: indicates that this record is providing an alias,
+and should not be used to create a listner.
+.sp
+\fITRANS_LOCAL\fR: indicates that this is a LOCALCONN transport.
+
+.H 2 "XtransConnInfo"
+.P
+Each connection will have an opaque \fIXtransConnInfo\fR transport connection
+object allocated for it. This record contains information specific to the
+connection. The record is defined
+as:
+.DS
+.nf
+typedef struct _XtransConnInfo *XtransConnInfo;
+
+struct _XtransConnInfo {
+ struct _Xtransport *transptr;
+ char *priv;
+ int flags;
+ int fd;
+ int family;
+ char *addr;
+ int addrlen;
+ char *peeraddr;
+ int peeraddrlen;
+};
+.fi
+.DE
+.H 1 "Exposed Transport Independent API"
+.P
+This API is included in each library and server that uses it. The API
+may be used by the library, but it is not added to the public API for that
+library. This interface is simply an implementation
+facilitator. This API contains a low level set of core primitives, and a few
+utility functions that are built on top of the primitives. The utility
+functions exist to provide a more familiar interface that can be used to
+port existing code.
+.P
+A macro is defined in Xtrans.h for TRANS(func) that creates a unique function
+name depending on where the code is compiled. For example, when built for Xlib,
+TRANS(OpenCOTSClient) becomes _X11TransOpenCOTSClient.
+.P
+All failures are considered fatal, and the connection should be closed and
+re-established if desired. In most cases, however, the value of errno will
+be available for debugging purposes.
+.H 2 "Core Interface API"
+.BL
+.LI
+XtransConnInfo
+TRANS(OpenCOTSClient)(char *address)
+.P
+This function creates a Connection-Oriented Transport that is suitable for
+use by a client.
+The parameter \fIaddress\fR contains the full address of the
+server to which this endpoint will be connected.
+This functions returns an opaque transport connection object on success,
+or NULL on failure.
+.LI
+XtransConnInfo
+TRANS(OpenCOTSServer)(char *address)
+.P
+This function creates a Connection-Oriented Transport that is suitable for
+use by a server.
+The parameter \fIaddress\fR contains the full address to which this
+server will be bound.
+This functions returns an opaque transport connection object on success,
+or NULL on failure.
+.LI
+XtransConnInfo
+TRANS(OpenCLTSClient)(char *address)
+.P
+This function creates a Connection-Less Transport that is suitable for
+use by a client.
+The parameter \fIaddress\fR contains the full address of the
+server to which this endpoint will be connected.
+This functions returns an opaque transport connection object on success,
+or NULL on failure.
+.LI
+XtransConnInfo
+TRANS(OpenCLTSServer)(char *address)
+.P
+This function creates a Connection-Less Transport that is suitable for
+use by a server.
+The parameter \fIaddress\fR contains the full address to which this
+server will be bound.
+This functions returns an opaque transport connection object on success,
+or NULL on failure.
+.LI
+int TRANS(SetOption)(XtransConnInfo connection, int option, int arg)
+.P
+This function sets transport options, similar to the way setsockopt() and
+ioctl() work.
+The parameter \fIconnection\fR is an endpoint that was obtained from
+_XTransOpen*() functions.
+The parameter \fIoption\fR contains the option that will be set. The actual
+values for \fIoption\fR are defined in a later section.
+The parameter \fIarg\fR can be used to pass in an additional value that may
+be required by some options.
+This function return 0 on success and -1 on failure.
+.P
+Note: Based on current usage, the complimentary function TRANS(GetOption)()
+is not necessary.
+.LI
+int TRANS(CreateListener)(XtransConnInfo connection, char *port, int flags)
+.P
+This function sets up the server endpoint for listening.
+The parameter \fIconnection\fR is an endpoint that was obtained from
+TRANS(OpenCOTSServer)() or TRANS(OpenCLTSServer)().
+The parameter \fIport\fR specifies the port to which this endpoint
+should be bound for listening.
+If \fIport\fR is NULL, then the transport may attempt to allocate any
+available TSAP for this connection. If the transport cannot support this,
+then this function will return a failure.
+The \fIflags\fR parameter can be set to ADDR_IN_USE_ALLOWED to allow
+the call to the underlying binding function to fail with a EADDRINUSE
+error without causing the TRANS(CreateListener) function itself to
+fail.
+This function return 0 on success and -1 on failure.
+.LI
+int TRANS(ResetListener)(XtransConnInfo connection)
+.P
+When a server is restarted, certain listen ports may need to be reset.
+For example, unix domain needs to check that the file used for communication
+has not been deleted. If it has, it must be recreated.
+The parameter \fIconnection\fR is an opened and bound endpoint that was
+obtained from TRANS(OpenCOTSServer)() and passed to TRANS(CreateListener)().
+This function will return one of the following values: TRANS_RESET_NOOP,
+TRANS_RESET_NEW_FD, or TRANS_RESET_FAILURE.
+.LI
+XtransConnInfo
+TRANS(Accept)(XtransConnInfo connection)
+.P
+Once a connection indication is received, this function can be called to
+accept the connection.
+The parameter \fIconnection\fR is an opened and bound endpoint that was
+obtained from TRANS(OpenCOTSServer)() and passed to TRANS(CreateListener)().
+This function will return a new opaque transport connection object upon
+success, NULL otherwise.
+.LI
+int TRANS(Connect)(XtransConnInfo connection, char *address)
+.P
+This function creates a connection to a server.
+The parameter \fIconnection\fR is an endpoint that was obtained from
+TRANS(OpenCOTSClient)().
+The parameters \fIaddress\fR specify the TSAP to which this
+endpoint should connect. If the protocol is included in the address, it will
+be ignored.
+This function return 0 on success and -1 on failure.
+.LI
+int TRANS(BytesReadable)(XtransConnInfo connection, BytesReadable_t *pend);
+.P
+This function provides the same functionality as the BytesReadable macro.
+.LI
+int TRANS(Read)(XtransConnInfo connection, char *buf, int size)
+.P
+This function will return the number of bytes requested on a COTS connection,
+and will return the minimum of the number bytes requested or the size of
+the incoming packet on a CLTS connection.
+.LI
+int TRANS(Write)(XtransConnInfo connection, char *buf, int size)
+.P
+This function will write the requested number of bytes on a COTS connection, and
+will send a packet of the requested size on a CLTS connection.
+.LI
+int TRANS(Readv)(XtransConnInfo connection, struct iovec *buf, int size)
+.P
+Similar to TRANS(Read)().
+.LI
+int TRANS(Writev)(XtransConnInfo connection, struct iovec *buf, int size)
+.P
+Similar to TRANS(Write)().
+.LI
+int TRANS(Disconnect)(XtransConnInfo connection)
+.P
+This function is used when an orderly disconnect is desired. This function
+breaks the connection on the transport. It is similar to the
+socket function shutdown().
+.LI
+int TRANS(Close)(XtransConnInfo connection)
+.P
+This function closes the transport, unbinds it, and frees all resources that
+was associated with the transport. If a TRANS(Disconnect) call was not made
+on the connection, a disorderly disconnect may occur.
+.LI
+int TRANS(IsLocal)(XtransConnInfo connection)
+.P
+Returns TRUE if it is a local transport.
+.LI
+int TRANS(GetMyAddr)(XtransConnInfo connection,
+.br
+ int *familyp, int *addrlenp, Xtransaddr **addrp)
+.P
+This function is similar to getsockname(). This function will allocate space
+for the address, so it must be freed by the caller. Not all transports will
+have a valid address until a connection is established. This function should
+not be used until the connection is established with Connect() or Accept().
+.LI
+int TRANS(GetPeerAddr)(XtransConnInfo connection,
+.br
+ int *familyp, int *addrlenp, Xtransaddr **addrp)
+.P
+This function is similar to getpeername(). This function will allocate space
+for the address, so it must be freed by the caller. Not all transports will
+have a valid address until a connection is established. This function should
+not be used until the connection is established with Connect() or Accept().
+.LI
+int TRANS(GetConnectionNumber)(XtransConnInfo connection)
+.P
+Returns the file descriptor associated with this transport.
+.LI
+int TRANS(MakeAllCOTSServerListeners)(
+.br
+ char *port, int *partial_ret, int *count_ret, XtransConnInfo **connections_ret)
+.P
+This function should be used by most servers. It will try to establish a COTS
+server endpoint for each transport listed in the transport table.
+\fIpartial_ret\fR will be set to True if only a partial network could be
+created. \fIcount_ret\fR is the number of transports returns, and
+\fIconnections_ret\fR is the list of transports.
+.LI
+int TRANS(MakeAllCLTSServerListeners)(
+.br
+ char *port, int *partial_ret, int *count_ret, XtransConnInfo **connections_ret)
+.P
+This function should be used by most servers. It will try to establish a CLTS
+server endpoint for each transport listed in the transport table.
+\fIpartial_ret\fR will be set to True if only a partial network could be
+created. \fIcount_ret\fR is the number of transports returns, and
+\fIconnections_ret\fR is the list of transports.
+.LE
+.H 2 "Utility API"
+.P
+This section describes a few useful functions that have been implemented on top
+of the Core Interface API. These functions are being provided as a convenience.
+.BL
+.LI
+int TRANS(ConvertAddress)(int *familyp, int *addrlenp, Xtransaddr *addrp)
+.P
+This function converts a sockaddr based address to an
+X authorization based address (ie AF_INET, AF_UNIX to the
+X protocol definition (ie FamilyInternet, FamilyLocal)).
+
+.LE
+.H 1 "Transport Option Definition"
+.P
+The following options are defined for the TRANS(SetOption)() function. If an
+OS or transport does not support any of these options, then it will silently
+ignore the option.
+.BL
+.LI
+TRANS_NONBLOCKING
+.P
+This option controls the blocking mode of the connection. If the argument
+is set to 1, then the connection will be set to blocking. If the argument
+is set to 0, then the connection will be set to non-blocking.
+.LI
+TRANS_CLOSEONEXEC
+.P
+This option determines what will happen to the connection when an exec
+is encountered. If the argument is set to 1, then the connection will be
+closed when an exec occurs. If the argument is set to 0, then the connection
+will not be closed when an exec occurs.
+.LE
+.H 1 "Hidden Transport Dependent API"
+.P
+The hidden transport dependent functions are placed in the Xtransport record.
+These function are similar to the Exposed Transport Independent API, but some
+of the parameters and return values are slightly different.
+Stuff like the #ifdef SUNSYSV should be handled inside these functions.
+.BL
+.LI
+XtransConnInfo *OpenCOTSClient (
+.br
+ struct _Xtransport *thistrans, char *protocol, char *host, char *port)
+.P
+This function creates a Connection-Oriented Transport. The parameter
+\fIthistrans\fR points to an Xtransport entry in the transport table. The
+parameters \fIprotocol\fR, \fIhost\fR, and \fIport\fR point to strings
+containing the corresponding parts of the address that was passed into
+TRANS(OpenCOTSClient)().
+.P
+This function must allocate and initialize the contents of the XtransConnInfo
+structure that is returned by this function. This function will open the
+transport, and bind it into the transport namespace if applicable. The
+local address portion of the XtransConnInfo structure will also be filled
+in by this function.
+.LI
+XtransConnInfo *OpenCOTSServer (
+.br
+ struct _Xtransport *thistrans, char *protocol, char *host, char *port)
+.P
+This function creates a Connection-Oriented Transport. The parameter
+\fIthistrans\fR points to an Xtransport entry in the transport table. The
+parameters \fIprotocol\fR, \fIhost\fR, and \fIport\fR point to strings
+containing the corresponding parts of the address that was passed into
+TRANS(OpenCOTSClient)().
+.P
+This function must allocate and initialize the contents of the XtransConnInfo
+structure that is returned by this function. This function will open the
+transport.
+.LI
+XtransConnInfo *OpenCLTSClient (
+.br
+ struct _Xtransport *thistrans, char *protocol, char *host, char *port)
+.P
+This function creates a Connection-Less Transport. The parameter
+\fIthistrans\fR points to an Xtransport entry in the transport table. The
+parameters \fIprotocol\fR, \fIhost\fR, and \fIport\fR point to strings
+containing the corresponding parts of the address that was passed into
+TRANS(OpenCOTSClient)().
+.P
+This function must allocate and initialize the contents of the XtransConnInfo
+structure that is returned by this function. This function will open the
+transport, and bind it into the transport namespace if applicable. The
+local address portion of the XtransConnInfo structure will also be filled
+in by this function.
+.LI
+XtransConnInfo *OpenCLTSServer (
+.br
+ struct _Xtransport *thistrans, char *protocol, char *host, char *port)
+.P
+This function creates a Connection-Less Transport. The parameter
+\fIthistrans\fR points to an Xtransport entry in the transport table. The
+parameters \fIprotocol\fR, \fIhost\fR, and \fIport\fR point to strings
+containing the corresponding parts of the address that was passed into
+TRANS(OpenCOTSClient)().
+.P
+This function must allocate and initialize the contents of the XtransConnInfo
+structure that is returned by this function. This function will open the
+transport.
+.LI
+int SetOption (struct _Xtransport *thistrans, int option, int arg)
+.P
+This function provides a transport dependent way of implementing the options
+defined by the X Transport Interface. In the current prototype, this function
+is not being used, because all of the option defined so far, are transport
+independent. This function will have to be used if a radically different
+transport type is added, or a transport dependent option is defined.
+.LI
+int CreateListener (struct _Xtransport *thistrans, char *port, int flags )
+.P
+This function takes a transport endpoint opened for a server, and sets it
+up to listen for incoming connection requests. The parameter \fIport\fR
+should contain the port portion of the address that was passed to the Open
+function.
+.P
+The parameter \fIflags\fR should be set to ADDR_IN_USE_ALLOWED if the
+underlying transport endpoint may be already bound and this should not
+be considered as an error. Otherwise \fIflags\fR sould be set to 0.
+This is used by IPv6 code, where the same socket can be bound to both
+an IPv6 address and then to a IPv4 address.
+.P
+This function will bind the transport into the transport name space if
+applicable, and fill in the local address portion of the XtransConnInfo
+structure. The transport endpoint will then be set to listen for
+incoming connection requests.
+.LI
+int ResetListener (struct _Xtransport *thistrans)
+.P
+This function resets the transport for listening.
+.LI
+XtransConnInfo Accept(struct _Xtransport *thistrans)
+.P
+This function creates a new transport endpoint as a result of an incoming
+connection request. The parameter \fIthistrans\fR is the endpoint that was opened
+for listening by the server. The new endpoint is opened and bound into the
+transport's namespace. A XtransConnInfo structure describing the new endpoint
+is returned from this function
+.LI
+int Connect(struct _Xtransport *thistrans, char *host, char *port )
+.P
+This function establishes a connection to a server. The parameters \fIhost\fR
+and \fIport\fR describe the server to which the connection should be
+established. The connection will be established so that Read() and Write()
+call can be made.
+.LI
+int BytesReadable(struct _Xtransport *thistrans, BytesReadable_t *pend )
+.P
+This function replaces the BytesReadable() macro. This allows each transport
+to have it's own mechanism for determining how much data is ready to be read.
+.LI
+int Read(struct _Xtransport *thistrans, char *buf, int size )
+.P
+This function reads \fIsize\fR bytes into \fIbuf\fR from the connection.
+.LI
+int Write(struct _Xtransport *thistrans, char *buf, int size )
+.P
+This function writes \fIsize\fR bytes from \fIbuf\fR to the connection.
+.LI
+int Readv(struct _Xtransport *thistrans, struct iovec *buf, int size )
+.P
+This function performs a readv() on the connection.
+.LI
+int Writev(struct _Xtransport *thistrans, struct iovec *buf, int size )
+.P
+This function performs a writev() on the connection.
+.LI
+int Disconnect(struct _Xtransport *thistrans)
+.P
+This function initiates an orderly shutdown of a connection. If a transport
+does not distinguish between orderly and disorderly disconnects, then a
+call to this function will have no affect.
+.LI
+int Close(struct _Xtransport *thistrans)
+.P
+This function will break the connection, and close the endpoint.
+.LE
+.H 1 "Configuration"
+.P
+The implementation of each transport can be platform specific. It is expected
+that existing connection types such as TCPCONN, UNIXCONN, LOCALCONN and
+STREAMSCONN will be replaced with flags for each possible transport type.
+.P
+Below are the flags that can be set in \fIConnectionFlags\fR in the vendor.cf
+or site.def config files.
+.TS
+center;
+l l .
+TCPCONN Enables the INET (IPv4) Domain Socket based transport
+IPv6 Extends TCPCONN to enable IPv6 Socket based transport
+UNIXCONN Enables the UNIX Domain Sokcet based transport
+STREAMSCONN Enables the TLI based transports
+LOCALCONN Enables the SYSV Local connection transports
+DNETCONN Enables the DECnet transports
+.TE
+.H 1 "Transport Specific Definitions"
+.TS
+center box;
+lb | cb sb sb
+lb | cb | cb | cb
+lb | cb | cb | cb
+l | l | l | l.
+Protocol Address Component
+ _ _ _
+Family protocol host port
+=
+Internet T{
+inet
+.br
+inet6
+.br
+tcp
+.br
+udp
+T} name of an internet addressable host T{
+string containing the name of a service or a valid port number.
+.br
+Example: "xserver0", "7100"
+T}
+_
+DECnet decnet name of a DECnet addressable host T{
+string containing the complete name of the object.
+.br
+Example: "X$X0"
+T}
+_
+NETware ipx name of a NETware addressable host T{
+Not sure of the specifics yet.
+T}
+_
+OSI osi name of an OSI addressable host T{
+Not sure of the specifics yet.
+T}
+_
+Local T{
+local
+.br
+pts
+.br
+named
+.br
+sco
+.br
+isc
+T} (ignored) T{
+String containing the port name, ie "xserver0", "fontserver0".
+T}
+.TE
+.H 1 "Implementation Notes"
+.P
+This section refers to the prototype implementation that is being developed
+concurrently with this document. This prototype has been able to flush out
+many details and problems as the specification was being developed.
+.P
+All of the source code for this interface is located in xc/lib/xtrans.
+.P
+All functions names in the source are of the format TRANS(func)(). The TRANS()
+macro is defined as
+.DS
+.sp
+#if (__STDC__ && !defined(UNIXCPP)) || defined(ANSICPP)
+#define TRANS(func) _PROTOCOLTrans##func
+#else
+#define TRANS(func) _PROTOCOLTrans/**/func
+#endif
+.sp
+.DE
+PROTOCOL will be uniquely defined in each directory where this code
+is compiled. PROTOCOL will be defined to be the name of the protocol that is
+implemented by the library or server, such as X11, FS, and ICE.
+.P
+All libraries and servers that use the X Transport Interface should have a new
+file called transport.c. This file will include the transports based
+on the configuration flags \fIConnectionFlags\fR. Below is an example
+transport.c.
+.DS
+.nf
+#include "Xtransint.h"
+
+#ifdef DNETCONN
+#include "Xtransdnet.c"
+#endif
+#ifdef LOCALCONN
+#include "Xtranslocal.c"
+#endif
+#ifdef TCPCONN
+#include "Xtranssock.c"
+#endif
+#ifdef STREAMSCONN
+#include "Xtranstli.c"
+#endif
+#include "Xtrans.c"
+#include "Xtransutil.c"
+.fi
+.DE
+.P
+The source files for this interface are listed below.
+.DS
+.TS
+center;
+l l.
+Xtrans.h T{
+Function prototypes and defines for
+the Transport Independent API.
+T}
+Xtransint.h T{
+Used by the interface implementation only.
+Contains the internal data structures.
+T}
+Xtranssock.c T{
+Socket implementation of the Transport Dependent API.
+T}
+Xtranstli.c T{
+TLI implementation of the Transport Dependent API.
+T}
+Xtransdnet.c T{
+DECnet implementation of the Transport Dependent API.
+T}
+Xtranslocal.c T{
+Implementation of the Transport Dependent API for
+SYSV Local connections.
+T}
+Xtrans.c T{
+Exposed Transport Independent API Functions.
+T}
+Xtransutil.c T{
+Collection of Utility functions that use the
+X Transport Interface.
+T}
+.TE
+.DE
+.P
+The file \fIXtransint.h\fR contains much of the transport related code that
+previously in Xlibint.h and Xlibnet.h. This will make the definitions
+available for all transport users. This should also obsolete the equivalent
+code in other libraries.