2.11BSD/man/cat4/spp.0
SPP(4P) UNIX Programmer's Manual SPP(4P)
NAME
spp - Xerox Sequenced Packet Protocol
SYNOPSIS
#include <sys/socket.h>
#include <netns/ns.h>
s = socket(AF_NS, SOCK_STREAM, 0);
#include <netns/sp.h>
s = socket(AF_NS, SOCK_SEQPACKET, 0);
DESCRIPTION
The SPP protocol provides reliable, flow-controlled, two-way
transmission of data. It is a byte-stream protocol used to
support the SOCK_STREAM abstraction. SPP uses the standard
NS(tm) address formats.
Sockets utilizing the SPP protocol are either "active" or
"passive". Active sockets initiate connections to passive
sockets. By default SPP sockets are created active; to
create a passive socket the _l_i_s_t_e_n(2) system call must be
used after binding the socket with the _b_i_n_d(2) system call.
Only passive sockets may use the _a_c_c_e_p_t(2) call to accept
incoming connections. Only active sockets may use the _c_o_n_-
_n_e_c_t(2) call to initiate connections.
Passive sockets may "underspecify" their location to match
incoming connection requests from multiple networks. This
technique, termed "wildcard addressing", allows a single
server to provide service to clients on multiple networks.
To create a socket which listens on all networks, the NS
address of all zeroes must be bound. The SPP port may still
be specified at this time; if the port is not specified the
system will assign one. Once a connection has been esta-
blished the socket's address is fixed by the peer entity's
location. The address assigned the socket is the address
associated with the network interface through which packets
are being transmitted and received. Normally this address
corresponds to the peer entity's network.
If the SOCK_SEQPACKET socket type is specified, each packet
received has the actual 12 byte sequenced packet header left
for the user to inspect:
struct sphdr {
u_char sp_cc; /* _c_o_n_n_e_c_t_i_o_n _c_o_n_t_r_o_l */
#define SP_EM 0x10 /* _e_n_d _o_f _m_e_s_s_a_g_e */
u_char sp_dt; /* _d_a_t_a_s_t_r_e_a_m _t_y_p_e */
u_short sp_sid;
u_short sp_did;
u_short sp_seq;
u_short sp_ack;
u_short sp_alo;
Printed 11/26/99 July 30, 1985 1
SPP(4P) UNIX Programmer's Manual SPP(4P)
};
This facilitates the implementation of higher level Xerox
protocols which make use of the data stream type field and
the end of message bit. Conversely, the user is required to
supply a 12 byte header, the only part of which inspected is
the data stream type and end of message fields.
For either socket type, packets received with the Attention
bit sent are interpreted as out of band data. Data sent
with send(..., ..., ..., MSG_OOB) cause the attention bit to
be set.
DIAGNOSTICS
A socket operation may fail with one of the following errors
returned:
[EISCONN] when trying to establish a connection on
a socket which already has one;
[ENOBUFS] when the system runs out of memory for
an internal data structure;
[ETIMEDOUT] when a connection was dropped due to
excessive retransmissions;
[ECONNRESET] when the remote peer forces the connec-
tion to be closed;
[ECONNREFUSED] when the remote peer actively refuses
connection establishment (usually
because no process is listening to the
port);
[EADDRINUSE] when an attempt is made to create a
socket with a port which has already
been allocated;
[EADDRNOTAVAIL] when an attempt is made to create a
socket with a network address for which
no network interface exists.
SOCKET OPTIONS
SO_DEFAULT_HEADERS when set, this determines the data
stream type and whether the end of mes-
sage bit is to be set on every ensuing
packet.
SO_MTU This specifies the maximum ammount of
user data in a single packet. The
default is 576 bytes - sizeof(struct
spidp). This quantity affects windowing
-- increasing it without increasing the
Printed 11/26/99 July 30, 1985 2
SPP(4P) UNIX Programmer's Manual SPP(4P)
amount of buffering in the socket will
lower the number of unread packets
accepted. Anything larger than the
default will not be forwarded by a bona
fide XEROX product internetwork router.
The data argument for the setsockopt
call must be an unsigned short.
SEE ALSO
intro(4N), ns(4F)
BUGS
There should be some way to reflect record boundaries in a
stream. For stream mode, there should be an option to get
the data stream type of the record the user process is about
to receive.
Printed 11/26/99 July 30, 1985 3