Next: TCRYPT Up: Protocol Specifications Previous: PMAP

TCP

TCP (Transmission Control Protocol)

SPECIFICATION
Transmission Control Protocol. Request for Comments 793, USC Information Sciences Institute, Marina Del Rey, Calif., Sept. 1981

SYNOPSIS
TCP is a reliable stream transport protocol. It maintains a connection between the server and the client, and provides reliable stream delivery to the process. This implementation is an encapsulation of the Unix 4.3 BSD implementation.

This implementation of TCP supports input and output buffering. Output buffers are contained within TCP. If the amount of data sent and unacknowledged by the peer reaches the output buffer size, TCP will block subsequent xPush's (or will return XMSG_ERR_WOULDBLOCKin the case of non-blocking I/O.)

TCP provides support for users to work with finite input buffers. TCP will limit the amount of input data sent to its upper protocol via xDemux to the size of the input buffer. When data have been consumed from the user's input buffer, free buffer space must be signalled to TCP via a TCP_SETRCVBUFSPACEcall (see below.) If a user does not wish to use input buffering, a control message signalling an empty buffer should be sent in response to each xDemux.

REALM
TCP is in the ASYNC realm.

PARTICIPANTS
TCP removes a pointer to a long (the TCP port number) from the participant stack. TCP ports must be less than 0x10000. If the local participant is missing, or if the local protocol number is ANY_PROT, TCP will select an unused local port.

CONTROL OPERATIONS

TCP_PUSH:
Force a TCP message to be sent. (session only)
Input:
none
Output:
none

TCP_GETSTATEINFO:
Returns state of the connection. (session only)
Input:
none
Output:
int

TCP_DUMPSTATEINFO:
Prints out statistics gathered by TCP. (protocol only)
Input:
none
Output:
none

TCP_GETFREEPORTNUM:
Returns an unused TCP port number. This port number will not be given out to subsequent TCP_GETFREEPORTNUMcalls until it is released with TCP_RELEASEPORTNUM. This allows an opener to separate reservation of free ports from the actual open operation, if desired. (protocol only)
Input:
none
Output:
long

TCP_RELEASEPORTNUM:
Releases a TCP portnumber previously acquired with TCP_GETFREEPORTNUM. (protocol only)
Input:
long
Output:
none

TCP_SETRCVBUFSPACE:
Tells TCP how many bytes in the receive queue are free. (session only)
Input:
u_short
Output:
none

TCP_SETRCVBUFSIZE:
Tells TCP the size of the TCP user's receive queue. (session only)
Input:
u_short
Output:
none

TCP_GETSNDBUFSPACE:
Asks TCP for the number of free bytes its send queue. (session only)
Input:
none
Output:
u_short

TCP_SETSNDBUFSIZE:
Tells TCP to change its send queue to the indicated size (session only)
Input:
u_short
Output:
none

TCP_SETOOBINLINE:
Tells TCP whether users wants urgent data to be delivered inline (non-zero == yes.) (session only)

Input:
int
Output:
none

TCP_GETOOBDATA:
reads the urgent data (exactly one byte), returning 1 on a successful read or returning 0 if data was either read already or was not received yet (the OOB notification may precede the actual reception of the OOB data)
Input:
none
Output:
char

TCP_OOBPUSH:
send a msg in urgent mode
Input:
Msg *
Output:
char

TCP_OOBMODE:
TCP uses this to tell the user of TCP that it has urgent data present, i.e., TCP does an xControl() call on its parent - THIS IS AN UPCALL! The first void pointer (args[0]) is of type XObj and is a pointer to the TCP session that invoked this operation. The second pointer (args[1]) is of type u_intand is the value of the urgent data mark. The oobmark indicates that the "oobmark-th" byte in the receive queue is the oobdata (or will be the oobdata.)

Note: all protocols using TCP without having OOB data delivered in-band must be prepared to accept this upcall.

Input:
void *args[2]
Output:
none

CONFIGURATION
name=tcp protocols=ip;

AUTHORS
Norm Hutchinson, Herman Rao, and David Mosberger-Tang



Next: TCRYPT Up: Protocol Specifications Previous: PMAP


Tue Nov 29 16:28:56 MST 1994