Annotation of cci/usr/src/man/man2/socket.2, revision 1.1.1.1

1.1       root        1: .TH SOCKET 2 "18 July 1983"
                      2: .UC 4
                      3: .SH NAME
                      4: socket \- create an endpoint for communication
                      5: .SH SYNOPSIS
                      6: .nf
                      7: .ft B
                      8: #include <sys/types.h>
                      9: #include <sys/socket.h>
                     10: .PP
                     11: .ft B
                     12: s = socket(af, type, protocol)
                     13: int s, af, type, protocol;
                     14: .fi
                     15: .SH DESCRIPTION
                     16: .I Socket
                     17: creates an endpoint for communication and returns a descriptor.
                     18: .PP
                     19: The
                     20: .I af
                     21: parameter specifies an address format with which addresses specified
                     22: in later operations using the socket should be interpreted.  These
                     23: formats are defined in the include file
                     24: .IR <sys/socket.h> .
                     25: The currently understood formats are
                     26: .PP
                     27: .RS
                     28: .nf
                     29: .ta 1.25i 1.75i
                     30: AF_UNIX        (UNIX path names),
                     31: AF_INET        (ARPA Internet addresses),
                     32: AF_PUP (Xerox PUP-I Internet addresses), and
                     33: AF_IMPLINK     (IMP \*(lqhost at IMP\*(rq addresses).
                     34: .fi
                     35: .RE
                     36: .PP
                     37: The socket has the indicated
                     38: .I type
                     39: which specifies the semantics of communication.  Currently
                     40: defined types are:
                     41: .PP
                     42: .RS
                     43: .nf
                     44: SOCK_STREAM
                     45: SOCK_DGRAM
                     46: SOCK_RAW
                     47: SOCK_SEQPACKET
                     48: SOCK_RDM
                     49: .fi
                     50: .RE
                     51: .PP
                     52: A SOCK_STREAM type provides sequenced, reliable,
                     53: two-way connection based byte streams with an out-of-band data
                     54: transmission mechanism.
                     55: A SOCK_DGRAM socket supports
                     56: datagrams (connectionless, unreliable messages of
                     57: a fixed (typically small) maximum length).
                     58: SOCK_RAW sockets provide access to internal network interfaces.
                     59: The types SOCK_RAW,
                     60: which is available only to the super-user, and
                     61: SOCK_SEQPACKET and SOCK_RDM, which are planned,
                     62: but not yet implemented, are not described here.
                     63: .PP
                     64: The
                     65: .I protocol
                     66: specifies a particular protocol to be used with the socket.
                     67: Normally only a single protocol exists to support a particular
                     68: socket type using a given address format.  However, it is possible
                     69: that many protocols may exist in which case a particular protocol
                     70: must be specified in this manner.  The protocol number to use is
                     71: particular to the \*(lqcommunication domain\*(rq in which communication
                     72: is to take place; see
                     73: .IR services (3N)
                     74: and
                     75: .IR protocols (3N).
                     76: .PP
                     77: Sockets of type SOCK_STREAM
                     78: are full-duplex byte streams, similar
                     79: to pipes.  A stream socket must be in a
                     80: .I connected
                     81: state before any data may be sent or received
                     82: on it.  A connection to another socket is created with a
                     83: .IR connect (2)
                     84: call.  Once connected, data may be transferred using
                     85: .IR read (2)
                     86: and
                     87: .IR write (2)
                     88: calls or some variant of the 
                     89: .IR send (2)
                     90: and
                     91: .IR recv (2)
                     92: calls.  When a session has been completed a
                     93: .IR close (2)
                     94: may be performed.
                     95: Out-of-band data may also be transmitted as described in
                     96: .IR send (2)
                     97: and received as described in
                     98: .IR recv (2).
                     99: .PP
                    100: The communications protocols used to implement a
                    101: SOCK_STREAM insure that data
                    102: is not lost or duplicated.  If a piece of data for which the
                    103: peer protocol has buffer space cannot be successfully transmitted
                    104: within a reasonable length of time, then
                    105: the connection is considered broken and calls
                    106: will indicate an error with
                    107: \-1 returns and with ETIMEDOUT as the specific code
                    108: in the global variable errno.
                    109: The protocols optionally keep sockets \*(lqwarm\*(rq by
                    110: forcing transmissions
                    111: roughly every minute in the absence of other activity.
                    112: An error is then indicated if no response can be
                    113: elicited on an otherwise
                    114: idle connection for a extended period (e.g. 5 minutes).
                    115: A SIGPIPE signal is raised if a process sends
                    116: on a broken stream; this causes naive processes,
                    117: which do not handle the signal, to exit.
                    118: .PP
                    119: SOCK_DGRAM and SOCK_RAW
                    120: sockets allow sending of datagrams to correspondents
                    121: named in
                    122: .IR send (2)
                    123: calls.  It is also possible to receive datagrams at
                    124: such a socket with
                    125: .IR recv (2).
                    126: .PP
                    127: An 
                    128: .IR fcntl (2)
                    129: call can be used to specify a process group to receive
                    130: a SIGURG signal when the out-of-band data arrives.
                    131: .PP
                    132: The operation of sockets is controlled by socket level
                    133: .IR options .
                    134: These options are defined in the file
                    135: .RI < sys/socket.h >
                    136: and explained below.  
                    137: .I Setsockopt
                    138: and
                    139: .IR getsockopt (2)
                    140: are used to set and get options, respectively.
                    141: .PP
                    142: .RS
                    143: .DT
                    144: .nf
                    145: SO_DEBUG               turn on recording of debugging information
                    146: SO_REUSEADDR   allow local address reuse
                    147: SO_KEEPALIVE   keep connections alive
                    148: SO_DONTROUTE   do no apply routing on outgoing messages
                    149: SO_LINGER              linger on close if data present
                    150: SO_DONTLINGER  do not linger on close
                    151: .fi
                    152: .RE
                    153: .PP
                    154: SO_DEBUG enables debugging in the underlying protocol modules.
                    155: SO_REUSEADDR indicates the rules used in validating addresses supplied
                    156: in a
                    157: .IR bind (2)
                    158: call should allow reuse of local addresses.  SO_KEEPALIVE enables the
                    159: periodic transmission of messages on a connected socket.  Should the
                    160: connected party fail to respond to these messages, the connection is
                    161: considered broken and processes using the socket are notified via a
                    162: SIGPIPE signal.  SO_DONTROUTE indicates that outgoing messages should
                    163: bypass the standard routing facilities.  Instead, messages are directed
                    164: to the appropriate network interface according to the network portion
                    165: of the destination address.  SO_LINGER
                    166: and SO_DONTLINGER control the actions taken when unsent messags
                    167: are queued on socket and a 
                    168: .IR close (2)
                    169: is performed.
                    170: If the socket promises reliable delivery of data and SO_LINGER is set,
                    171: the system will block the process on the 
                    172: .I close
                    173: attempt until it is able to transmit the data or until it decides it
                    174: is unable to deliver the information (a timeout period, termed the
                    175: linger interval, is specified in the
                    176: .IR setsockopt 
                    177: call when SO_LINGER is requested). 
                    178: If SO_DONTLINGER is specified and a 
                    179: .I close
                    180: is issued, the system will process the close in a manner which allows
                    181: the process to continue as quickly as possible.
                    182: .SH "RETURN VALUE
                    183: A \-1 is returned if an error occurs, otherwise the return
                    184: value is a descriptor referencing the socket.
                    185: .SH "ERRORS
                    186: The \fIsocket\fP call fails if:
                    187: .TP 20
                    188: [EAFNOSUPPORT]
                    189: The specified address family is not supported in this version
                    190: of the system.
                    191: .TP 20
                    192: [ESOCKTNOSUPPORT]
                    193: The specified socket type is not supported in this address family.
                    194: .TP 20
                    195: [EPROTONOSUPPORT]
                    196: The specified protocol is not supported.
                    197: .TP 20
                    198: [EMFILE]
                    199: The per-process descriptor table is full.
                    200: .TP 20
                    201: [ENOBUFS]
                    202: No buffer space is available.  The socket cannot be created.
                    203: .SH SEE ALSO
                    204: accept(2), bind(2), connect(2), getsockname(2), getsockopt(2),
                    205: ioctl(2), listen(2), recv(2),
                    206: select(2), send(2), shutdown(2), socketpair(2)
                    207: .br
                    208: ``A 4.2BSD Interprocess Communication Primer''.
                    209: .SH BUGS
                    210: The use of keepalives is a questionable feature for this layer.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.