Annotation of 43BSDReno/share/doc/ps1/08.ipc/2.t, revision 1.1.1.1

1.1       root        1: .\" Copyright (c) 1986 The Regents of the University of California.
                      2: .\" All rights reserved.
                      3: .\"
                      4: .\" Redistribution and use in source and binary forms are permitted
                      5: .\" provided that the above copyright notice and this paragraph are
                      6: .\" duplicated in all such forms and that any documentation,
                      7: .\" advertising materials, and other materials related to such
                      8: .\" distribution and use acknowledge that the software was developed
                      9: .\" by the University of California, Berkeley.  The name of the
                     10: .\" University may not be used to endorse or promote products derived
                     11: .\" from this software without specific prior written permission.
                     12: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
                     13: .\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
                     14: .\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
                     15: .\"
                     16: .\"    @(#)2.t 1.4 (Berkeley) 3/7/89
                     17: .\"
                     18: .\".ds RH "Basics
                     19: .bp
                     20: .nr H1 2
                     21: .nr H2 0
                     22: .bp
                     23: .LG
                     24: .B
                     25: .ce
                     26: 2. BASICS
                     27: .sp 2
                     28: .R
                     29: .NL
                     30: .PP
                     31: The basic building block for communication is the \fIsocket\fP.
                     32: A socket is an endpoint of communication to which a name may
                     33: be \fIbound\fP.  Each socket in use has a \fItype\fP
                     34: and one or more associated processes.  Sockets exist within
                     35: \fIcommunication domains\fP.  
                     36: A communication domain is an
                     37: abstraction introduced to bundle common properties of
                     38: processes communicating through sockets.
                     39: One such property is the scheme used to name sockets.  For
                     40: example, in the UNIX communication domain sockets are
                     41: named with UNIX path names; e.g. a
                     42: socket may be named \*(lq/dev/foo\*(rq.  Sockets normally
                     43: exchange data only with
                     44: sockets in the same domain (it may be possible to cross domain
                     45: boundaries, but only if some translation process is
                     46: performed).  The
                     47: 4.3BSD IPC facilities support three separate communication domains:
                     48: the UNIX domain, for on-system communication;
                     49: the Internet domain, which is used by
                     50: processes which communicate
                     51: using the the DARPA standard communication protocols;
                     52: and the NS domain, which is used by processes which
                     53: communicate using the Xerox standard communication
                     54: protocols*.
                     55: .FS
                     56: * See \fIInternet Transport Protocols\fP, Xerox System Integration
                     57: Standard (XSIS)028112 for more information.  This document is
                     58: almost a necessity for one trying to write NS applications.
                     59: .FE
                     60: The underlying communication
                     61: facilities provided by these domains have a significant influence
                     62: on the internal system implementation as well as the interface to
                     63: socket facilities available to a user.  An example of the
                     64: latter is that a socket \*(lqoperating\*(rq in the UNIX domain
                     65: sees a subset of the error conditions which are possible
                     66: when operating in the Internet (or NS) domain.
                     67: .NH 2
                     68: Socket types
                     69: .PP
                     70: Sockets are
                     71: typed according to the communication properties visible to a
                     72: user. 
                     73: Processes are presumed to communicate only between sockets of
                     74: the same type, although there is
                     75: nothing that prevents communication between sockets of different
                     76: types should the underlying communication
                     77: protocols support this.
                     78: .PP
                     79: Four types of sockets currently are available to a user.
                     80: A \fIstream\fP socket provides for the bidirectional, reliable,
                     81: sequenced, and unduplicated flow of data without record boundaries.
                     82: Aside from the bidirectionality of data flow, a pair of connected
                     83: stream sockets provides an interface nearly identical to that of pipes\(dg.
                     84: .FS
                     85: \(dg In the UNIX domain, in fact, the semantics are identical and,
                     86: as one might expect, pipes have been implemented internally
                     87: as simply a pair of connected stream sockets.
                     88: .FE
                     89: .PP
                     90: A \fIdatagram\fP socket supports bidirectional flow of data which
                     91: is not promised to be sequenced, reliable, or unduplicated. 
                     92: That is, a process
                     93: receiving messages on a datagram socket may find messages duplicated, 
                     94: and, possibly,
                     95: in an order different from the order in which it was sent. 
                     96: An important characteristic of a datagram
                     97: socket is that record boundaries in data are preserved.  Datagram
                     98: sockets closely model the facilities found in many contemporary
                     99: packet switched networks such as the Ethernet.
                    100: .PP
                    101: A \fIraw\fP socket provides users access to
                    102: the underlying communication
                    103: protocols which support socket abstractions.
                    104: These sockets are normally datagram oriented, though their
                    105: exact characteristics are dependent on the interface provided by
                    106: the protocol.  Raw sockets are not intended for the general user; they
                    107: have been provided mainly for those interested in developing new 
                    108: communication protocols, or for gaining access to some of the more
                    109: esoteric facilities of an existing protocol.  The use of raw sockets
                    110: is considered in section 5.
                    111: .PP
                    112: A \fIsequenced packet\fP socket is similar to a stream socket,
                    113: with the exception that record boundaries are preserved.  This 
                    114: interface is provided only as part of the NS socket abstraction,
                    115: and is very important in most serious NS applications.
                    116: Sequenced-packet sockets allow the user to manipulate the
                    117: SPP or IDP headers on a packet or a group of packets either
                    118: by writing a prototype header along with whatever data is
                    119: to be sent, or by specifying a default header to be used with
                    120: all outgoing data, and allows the user to receive the headers
                    121: on incoming packets.  The use of these options is considered in
                    122: section 5.
                    123: .PP
                    124: Another potential socket type which has interesting properties is
                    125: the \fIreliably delivered
                    126: message\fP socket.
                    127: The reliably delivered message socket has
                    128: similar properties to a datagram socket, but with
                    129: reliable delivery.  There is currently no support for this
                    130: type of socket, but a reliably delivered message protocol
                    131: similar to Xerox's Packet Exchange Protocol (PEX) may be
                    132: simulated at the user level.  More information on this topic
                    133: can be found in section 5.
                    134: .NH 2
                    135: Socket creation
                    136: .PP
                    137: To create a socket the \fIsocket\fP system call is used:
                    138: .DS
                    139: s = socket(domain, type, protocol);
                    140: .DE
                    141: This call requests that the system create a socket in the specified
                    142: \fIdomain\fP and of the specified \fItype\fP.  A particular protocol may
                    143: also be requested.  If the protocol is left unspecified (a value
                    144: of 0), the system will select an appropriate protocol from those
                    145: protocols which comprise the communication domain and which
                    146: may be used to support the requested socket type.  The user is
                    147: returned a descriptor (a small integer number) which may be used
                    148: in later system calls which operate on sockets.  The domain is specified as
                    149: one of the manifest constants defined in the file <\fIsys/socket.h\fP>.
                    150: For the UNIX domain the constant is AF_UNIX*;  for the Internet
                    151: .FS
                    152: * The manifest constants are named AF_whatever as they indicate
                    153: the ``address format'' to use in interpreting names.
                    154: .FE
                    155: domain AF_INET; and for the NS domain, AF_NS.  
                    156: The socket types are also defined in this file
                    157: and one of SOCK_STREAM, SOCK_DGRAM, SOCK_RAW, or SOCK_SEQPACKET
                    158: must be specified.
                    159: To create a stream socket in the Internet domain the following
                    160: call might be used:
                    161: .DS
                    162: s = socket(AF_INET, SOCK_STREAM, 0);
                    163: .DE
                    164: This call would result in a stream socket being created with the TCP
                    165: protocol providing the underlying communication support.  To
                    166: create a datagram socket for on-machine use the call might
                    167: be:
                    168: .DS
                    169: s = socket(AF_UNIX, SOCK_DGRAM, 0);
                    170: .DE
                    171: .PP
                    172: The default protocol (used when the \fIprotocol\fP argument to the
                    173: \fIsocket\fP call is 0) should be correct for most every
                    174: situation.  However, it is possible to specify a protocol
                    175: other than the default; this will be covered in
                    176: section 5.
                    177: .PP
                    178: There are several reasons a socket call may fail.  Aside from
                    179: the rare occurrence of lack of memory (ENOBUFS), a socket
                    180: request may fail due to a request for an unknown protocol
                    181: (EPROTONOSUPPORT), or a request for a type of socket for
                    182: which there is no supporting protocol (EPROTOTYPE). 
                    183: .NH 2
                    184: Binding local names
                    185: .PP
                    186: A socket is created without a name.  Until a name is bound
                    187: to a socket, processes have no way to reference it and, consequently,
                    188: no messages may be received on it.
                    189: Communicating processes are bound
                    190: by an \fIassociation\fP.  In the Internet and NS domains,
                    191: an association 
                    192: is composed of local and foreign
                    193: addresses, and local and foreign ports,
                    194: while in the UNIX domain, an association is composed of
                    195: local and foreign path names (the phrase ``foreign pathname''
                    196: means a pathname created by a foreign process, not a pathname
                    197: on a foreign system).
                    198: In most domains, associations must be unique.
                    199: In the Internet domain there
                    200: may never be duplicate <protocol, local address, local port, foreign
                    201: address, foreign port> tuples.  UNIX domain sockets need not always
                    202: be bound to a name, but when bound
                    203: there may never be duplicate <protocol, local pathname, foreign
                    204: pathname> tuples.
                    205: The pathnames may not refer to files
                    206: already existing on the system
                    207: in 4.3; the situation may change in future releases.
                    208: .PP
                    209: The \fIbind\fP system call allows a process to specify half of
                    210: an association, <local address, local port>
                    211: (or <local pathname>), while the \fIconnect\fP
                    212: and \fIaccept\fP primitives are used to complete a socket's association.
                    213: .PP
                    214: In the Internet domain,
                    215: binding names to sockets can be fairly complex.
                    216: Fortunately, it is usually not necessary to specifically bind an
                    217: address and port number to a socket, because the
                    218: \fIconnect\fP and \fIsend\fP calls will automatically
                    219: bind an appropriate address if they are used with an
                    220: unbound socket.  The process of binding names to NS
                    221: sockets is similar in most ways to that of
                    222: binding names to Internet sockets.
                    223: .PP
                    224: The \fIbind\fP system call is used as follows:
                    225: .DS
                    226: bind(s, name, namelen);
                    227: .DE
                    228: The bound name is a variable length byte string which is interpreted
                    229: by the supporting protocol(s).  Its interpretation may vary from
                    230: communication domain to communication domain (this is one of
                    231: the properties which comprise the \*(lqdomain\*(rq).
                    232: As mentioned, in the
                    233: Internet domain names contain an Internet address and port
                    234: number.  NS domain names contain an NS address and
                    235: port number.  In the UNIX domain, names contain a path name and
                    236: a family, which is always AF_UNIX.  If one wanted to bind
                    237: the name \*(lq/tmp/foo\*(rq to a UNIX domain socket, the
                    238: following code would be used*:
                    239: .FS
                    240: * Note that, although the tendency here is to call the \*(lqaddr\*(rq
                    241: structure \*(lqsun\*(rq, doing so would cause problems if the code
                    242: were ever ported to a Sun workstation.
                    243: .FE
                    244: .DS
                    245: #include <sys/un.h>
                    246:  ...
                    247: struct sockaddr_un addr;
                    248:  ...
                    249: strcpy(addr.sun_path, "/tmp/foo");
                    250: addr.sun_family = AF_UNIX;
                    251: bind(s, (struct sockaddr *) &addr, strlen(addr.sun_path) +
                    252:     sizeof (addr.sun_family));
                    253: .DE
                    254: Note that in determining the size of a UNIX domain address null
                    255: bytes are not counted, which is why \fIstrlen\fP is used.  In
                    256: the current implementation of UNIX domain IPC under 4.3BSD,
                    257: the file name
                    258: referred to in \fIaddr.sun_path\fP is created as a socket
                    259: in the system file space.
                    260: The caller must, therefore, have
                    261: write permission in the directory where
                    262: \fIaddr.sun_path\fP is to reside, and this file should be deleted by the
                    263: caller when it is no longer needed.  Future versions of 4BSD
                    264: may not create this file.
                    265: .PP
                    266: In binding an Internet address things become more
                    267: complicated.  The actual call is similar,
                    268: .DS
                    269: #include <sys/types.h>
                    270: #include <netinet/in.h>
                    271:  ...
                    272: struct sockaddr_in sin;
                    273:  ...
                    274: bind(s, (struct sockaddr *) &sin, sizeof (sin));
                    275: .DE
                    276: but the selection of what to place in the address \fIsin\fP
                    277: requires some discussion.  We will come back to the problem
                    278: of formulating Internet addresses in section 3 when 
                    279: the library routines used in name resolution are discussed.
                    280: .PP
                    281: Binding an NS address to a socket is even more
                    282: difficult,
                    283: especially since the Internet library routines do not
                    284: work with NS hostnames.  The actual call is again similar:
                    285: .DS
                    286: #include <sys/types.h>
                    287: #include <netns/ns.h>
                    288:  ...
                    289: struct sockaddr_ns sns;
                    290:  ...
                    291: bind(s, (struct sockaddr *) &sns, sizeof (sns));
                    292: .DE
                    293: Again, discussion of what to place in a \*(lqstruct sockaddr_ns\*(rq
                    294: will be deferred to section 3.
                    295: .NH 2
                    296: Connection establishment
                    297: .PP
                    298: Connection establishment is usually asymmetric,
                    299: with one process a \*(lqclient\*(rq and the other a \*(lqserver\*(rq.
                    300: The server, when willing to offer its advertised services,
                    301: binds a socket to a well-known address associated with the service
                    302: and then passively \*(lqlistens\*(rq on its socket.
                    303: It is then possible for an unrelated process to rendezvous
                    304: with the server.
                    305: The client requests services from the server by initiating a
                    306: \*(lqconnection\*(rq to the server's socket.
                    307: On the client side the \fIconnect\fP call is
                    308: used to initiate a connection.  Using the UNIX domain, this
                    309: might appear as,
                    310: .DS
                    311: struct sockaddr_un server;
                    312:  ...
                    313: connect(s, (struct sockaddr *)&server, strlen(server.sun_path) +
                    314:     sizeof (server.sun_family));
                    315: .DE
                    316: while in the Internet domain,
                    317: .DS
                    318: struct sockaddr_in server;
                    319:  ...
                    320: connect(s, (struct sockaddr *)&server, sizeof (server));
                    321: .DE
                    322: and in the NS domain,
                    323: .DS
                    324: struct sockaddr_ns server;
                    325:  ...
                    326: connect(s, (struct sockaddr *)&server, sizeof (server));
                    327: .DE
                    328: where \fIserver\fP in the example above would contain either the UNIX
                    329: pathname, Internet address and port number, or NS address and
                    330: port number of the server to which the
                    331: client process wishes to speak.
                    332: If the client process's socket is unbound at the time of
                    333: the connect call,
                    334: the system will automatically select and bind a name to
                    335: the socket if necessary; c.f. section 5.4.
                    336: This is the usual way that local addresses are bound
                    337: to a socket.
                    338: .PP
                    339: An error is returned if the connection was unsuccessful
                    340: (any name automatically bound by the system, however, remains).
                    341: Otherwise, the socket is associated with the server and
                    342: data transfer may begin.  Some of the more common errors returned
                    343: when a connection attempt fails are:
                    344: .IP ETIMEDOUT
                    345: .br
                    346: After failing to establish a connection for a period of time,
                    347: the system decided there was no point in retrying the
                    348: connection attempt any more.  This usually occurs because
                    349: the destination host is down, or because problems in
                    350: the network resulted in transmissions being lost.
                    351: .IP ECONNREFUSED
                    352: .br
                    353: The host refused service for some reason.
                    354: This is usually
                    355: due to a server process
                    356: not being present at the requested name.
                    357: .IP "ENETDOWN or EHOSTDOWN"
                    358: .br
                    359: These operational errors are 
                    360: returned based on status information delivered to
                    361: the client host by the underlying communication services.
                    362: .IP "ENETUNREACH or EHOSTUNREACH"
                    363: .br
                    364: These operational errors can occur either because the network
                    365: or host is unknown (no route to the network or host is present),
                    366: or because of status information returned by intermediate
                    367: gateways or switching nodes.  Many times the status returned
                    368: is not sufficient to distinguish a network being down from a
                    369: host being down, in which case the system
                    370: indicates the entire network is unreachable.
                    371: .PP
                    372: For the server to receive a client's connection it must perform
                    373: two steps after binding its socket.
                    374: The first is to indicate a willingness to listen for
                    375: incoming connection requests:
                    376: .DS
                    377: listen(s, 5);
                    378: .DE
                    379: The second parameter to the \fIlisten\fP call specifies the maximum
                    380: number of outstanding connections which may be queued awaiting 
                    381: acceptance by the server process; this number
                    382: may be limited by the system.  Should a connection be
                    383: requested while the queue is full, the connection will not be
                    384: refused, but rather the individual messages which comprise the
                    385: request will be ignored.  This gives a harried server time to 
                    386: make room in its pending connection queue while the client
                    387: retries the connection request.  Had the connection been returned
                    388: with the ECONNREFUSED error, the client would be unable to tell
                    389: if the server was up or not.  As it is now it is still possible
                    390: to get the ETIMEDOUT error back, though this is unlikely.  The
                    391: backlog figure supplied with the listen call is currently limited
                    392: by the system to a maximum of 5 pending connections on any
                    393: one queue.  This avoids the problem of processes hogging system
                    394: resources by setting an infinite backlog, then ignoring
                    395: all connection requests.
                    396: .PP
                    397: With a socket marked as listening, a server may \fIaccept\fP
                    398: a connection:
                    399: .DS
                    400: struct sockaddr_in from;
                    401:  ...
                    402: fromlen = sizeof (from);
                    403: newsock = accept(s, (struct sockaddr *)&from, &fromlen);
                    404: .DE
                    405: (For the UNIX domain, \fIfrom\fP would be declared as a
                    406: \fIstruct sockaddr_un\fP, and for the NS domain, \fIfrom\fP
                    407: would be declared as a \fIstruct sockaddr_ns\fP,
                    408: but nothing different would need
                    409: to be done as far as \fIfromlen\fP is concerned.  In the examples
                    410: which follow, only Internet routines will be discussed.)  A new
                    411: descriptor is returned on receipt of a connection (along with
                    412: a new socket).  If the server wishes to find out who its client is,
                    413: it may supply a buffer for the client socket's name.  The value-result
                    414: parameter \fIfromlen\fP is initialized by the server to indicate how
                    415: much space is associated with \fIfrom\fP, then modified on return
                    416: to reflect the true size of the name.  If the client's name is not
                    417: of interest, the second parameter may be a null pointer.
                    418: .PP
                    419: \fIAccept\fP normally blocks.  That is, \fIaccept\fP
                    420: will not return until a connection is available or the system call
                    421: is interrupted by a signal to the process.  Further, there is no
                    422: way for a process to indicate it will accept connections from only
                    423: a specific individual, or individuals.  It is up to the user process
                    424: to consider who the connection is from and close down the connection
                    425: if it does not wish to speak to the process.  If the server process
                    426: wants to accept connections on more than one socket, or wants to avoid blocking
                    427: on the accept call, there are alternatives; they will be considered
                    428: in section 5.
                    429: .NH 2
                    430: Data transfer
                    431: .PP
                    432: With a connection established, data may begin to flow.  To send
                    433: and receive data there are a number of possible calls.
                    434: With the peer entity at each end of a connection
                    435: anchored, a user can send or receive a message without specifying
                    436: the peer.  As one might expect, in this case, then
                    437: the normal \fIread\fP and \fIwrite\fP system calls are usable,
                    438: .DS
                    439: write(s, buf, sizeof (buf));
                    440: read(s, buf, sizeof (buf));
                    441: .DE
                    442: In addition to \fIread\fP and \fIwrite\fP,
                    443: the new calls \fIsend\fP and \fIrecv\fP
                    444: may be used:
                    445: .DS
                    446: send(s, buf, sizeof (buf), flags);
                    447: recv(s, buf, sizeof (buf), flags);
                    448: .DE
                    449: While \fIsend\fP and \fIrecv\fP are virtually identical to
                    450: \fIread\fP and \fIwrite\fP,
                    451: the extra \fIflags\fP argument is important.  The flags,
                    452: defined in \fI<sys/socket.h>\fP, may be
                    453: specified as a non-zero value if one or more
                    454: of the following is required:
                    455: .DS
                    456: .TS
                    457: l l.
                    458: MSG_OOB        send/receive out of band data
                    459: MSG_PEEK       look at data without reading
                    460: MSG_DONTROUTE  send data without routing packets
                    461: .TE
                    462: .DE
                    463: Out of band data is a notion specific to stream sockets, and one
                    464: which we will not immediately consider.  The option to have data
                    465: sent without routing applied to the outgoing packets is currently 
                    466: used only by the routing table management process, and is
                    467: unlikely to be of interest to the casual user.  The ability
                    468: to preview data is, however, of interest.  When MSG_PEEK
                    469: is specified with a \fIrecv\fP call, any data present is returned
                    470: to the user, but treated as still \*(lqunread\*(rq.  That
                    471: is, the next \fIread\fP or \fIrecv\fP call applied to the socket will
                    472: return the data previously previewed.
                    473: .NH 2
                    474: Discarding sockets
                    475: .PP
                    476: Once a socket is no longer of interest, it may be discarded
                    477: by applying a \fIclose\fP to the descriptor,
                    478: .DS
                    479: close(s);
                    480: .DE
                    481: If data is associated with a socket which promises reliable delivery
                    482: (e.g. a stream socket) when a close takes place, the system will
                    483: continue to attempt to transfer the data. 
                    484: However, after a fairly long period of
                    485: time, if the data is still undelivered, it will be discarded.
                    486: Should a user have no use for any pending data, it may 
                    487: perform a \fIshutdown\fP on the socket prior to closing it.
                    488: This call is of the form:
                    489: .DS
                    490: shutdown(s, how);
                    491: .DE
                    492: where \fIhow\fP is 0 if the user is no longer interested in reading
                    493: data, 1 if no more data will be sent, or 2 if no data is to
                    494: be sent or received.
                    495: .NH 2
                    496: Connectionless sockets
                    497: .PP
                    498: To this point we have been concerned mostly with sockets which
                    499: follow a connection oriented model.  However, there is also
                    500: support for connectionless interactions typical of the datagram
                    501: facilities found in contemporary packet switched networks.
                    502: A datagram socket provides a symmetric interface to data
                    503: exchange.  While processes are still likely to be client
                    504: and server, there is no requirement for connection establishment.
                    505: Instead, each message includes the destination address.
                    506: .PP
                    507: Datagram sockets are created as before.
                    508: If a particular local address is needed,
                    509: the \fIbind\fP operation must precede the first data transmission.
                    510: Otherwise, the system will set the local address and/or port
                    511: when data is first sent.
                    512: To send data, the \fIsendto\fP primitive is used,
                    513: .DS
                    514: sendto(s, buf, buflen, flags, (struct sockaddr *)&to, tolen);
                    515: .DE
                    516: The \fIs\fP, \fIbuf\fP, \fIbuflen\fP, and \fIflags\fP
                    517: parameters are used as before. 
                    518: The \fIto\fP and \fItolen\fP
                    519: values are used to indicate the address of the intended recipient of the
                    520: message.  When
                    521: using an unreliable datagram interface, it is
                    522: unlikely that any errors will be reported to the sender.  When
                    523: information is present locally to recognize a message that can
                    524: not be delivered (for instance when a network is unreachable),
                    525: the call will return \-1 and the global value \fIerrno\fP will
                    526: contain an error number. 
                    527: .PP
                    528: To receive messages on an unconnected datagram socket, the
                    529: \fIrecvfrom\fP primitive is provided:
                    530: .DS
                    531: recvfrom(s, buf, buflen, flags, (struct sockaddr *)&from, &fromlen);
                    532: .DE
                    533: Once again, the \fIfromlen\fP parameter is handled in
                    534: a value-result fashion, initially containing the size of
                    535: the \fIfrom\fP buffer, and modified on return to indicate
                    536: the actual size of the address from which the datagram was received.
                    537: .PP
                    538: In addition to the two calls mentioned above, datagram
                    539: sockets may also use the \fIconnect\fP call to associate
                    540: a socket with a specific destination address.  In this case, any
                    541: data sent on the socket will automatically be addressed
                    542: to the connected peer, and only data received from that
                    543: peer will be delivered to the user.  Only one connected
                    544: address is permitted for each socket at one time;
                    545: a second connect will change the destination address,
                    546: and a connect to a null address (family AF_UNSPEC)
                    547: will disconnect.
                    548: Connect requests on datagram sockets return immediately,
                    549: as this simply results in the system recording
                    550: the peer's address (as compared to a stream socket, where a
                    551: connect request initiates establishment of an end to end
                    552: connection).  \fIAccept\fP and \fIlisten\fP are not
                    553: used with datagram sockets.
                    554: .PP
                    555: While a datagram socket socket is connected,
                    556: errors from recent \fIsend\fP calls may be returned
                    557: asynchronously.
                    558: These errors may be reported on subsequent operations
                    559: on the socket,
                    560: or a special socket option used with \fIgetsockopt\fP, SO_ERROR,
                    561: may be used to interrogate the error status.
                    562: A \fIselect\fP for reading or writing will return true
                    563: when an error indication has been received.
                    564: The next operation will return the error, and the error status is cleared.
                    565: Other of the less
                    566: important details of datagram sockets are described
                    567: in section 5.
                    568: .NH 2
                    569: Input/Output multiplexing
                    570: .PP
                    571: One last facility often used in developing applications
                    572: is the ability to multiplex i/o requests among multiple
                    573: sockets and/or files.  This is done using the \fIselect\fP
                    574: call:
                    575: .DS
                    576: #include <sys/time.h>
                    577: #include <sys/types.h>
                    578:  ...
                    579: 
                    580: fd_set readmask, writemask, exceptmask;
                    581: struct timeval timeout;
                    582:  ...
                    583: select(nfds, &readmask, &writemask, &exceptmask, &timeout);
                    584: .DE
                    585: \fISelect\fP takes as arguments pointers to three sets, one for
                    586: the set of file descriptors for which the caller wishes to
                    587: be able to read data on, one for those descriptors to which
                    588: data is to be written, and one for which exceptional conditions
                    589: are pending; out-of-band data is the only
                    590: exceptional condition currently implemented by the socket
                    591: If the user is not interested
                    592: in certain conditions (i.e., read, write, or exceptions),
                    593: the corresponding argument to the \fIselect\fP should
                    594: be a null pointer.
                    595: .PP
                    596: Each set is actually a structure containing an array of
                    597: long integer bit masks; the size of the array is set
                    598: by the definition FD_SETSIZE.
                    599: The array is be
                    600: long enough to hold one bit for each of FD_SETSIZE file descriptors.
                    601: .PP
                    602: The macros FD_SET(\fIfd, &mask\fP) and
                    603: FD_CLR(\fIfd, &mask\fP)
                    604: have been provided for adding and removing file descriptor
                    605: \fIfd\fP in the set \fImask\fP.  The
                    606: set should be zeroed before use, and
                    607: the macro FD_ZERO(\fI&mask\fP) has been provided
                    608: to clear the set \fImask\fP.
                    609: The parameter \fInfds\fP in the \fIselect\fP call specifies the range
                    610: of file descriptors  (i.e. one plus the value of the largest
                    611: descriptor) to be examined in a set. 
                    612: .PP
                    613: A timeout value may be specified if the selection
                    614: is not to last more than a predetermined period of time.  If
                    615: the fields in \fItimeout\fP are set to 0, the selection takes
                    616: the form of a
                    617: \fIpoll\fP, returning immediately.  If the last parameter is
                    618: a null pointer, the selection will block indefinitely*.
                    619: .FS
                    620: * To be more specific, a return takes place only when a
                    621: descriptor is selectable, or when a signal is received by
                    622: the caller, interrupting the system call.
                    623: .FE
                    624: \fISelect\fP normally returns the number of file descriptors selected;
                    625: if the \fIselect\fP call returns due to the timeout expiring, then
                    626: the value 0 is returned.
                    627: If the \fIselect\fP terminates because of an error or interruption,
                    628: a \-1 is returned with the error number in \fIerrno\fP,
                    629: and with the file descriptor masks unchanged.
                    630: .PP
                    631: Assuming a successful return, the three sets will
                    632: indicate which
                    633: file descriptors are ready to be read from, written to, or
                    634: have exceptional conditions pending.
                    635: The status of a file descriptor in a select mask may be
                    636: tested with the \fIFD_ISSET(fd, &mask)\fP macro, which
                    637: returns a non-zero value if \fIfd\fP is a member of the set
                    638: \fImask\fP, and 0 if it is not.
                    639: .PP
                    640: To determine if there are connections waiting 
                    641: on a socket to be used with an \fIaccept\fP call,
                    642: \fIselect\fP can be used, followed by
                    643: a \fIFD_ISSET(fd, &mask)\fP macro to check for read
                    644: readiness on the appropriate socket.  If \fIFD_ISSET\fP
                    645: returns a non-zero value, indicating permission to read, then a
                    646: connection is pending on the socket.
                    647: .PP
                    648: As an example, to read data from two sockets, \fIs1\fP and
                    649: \fIs2\fP as it is available from each and with a one-second
                    650: timeout, the following code
                    651: might be used:
                    652: .DS
                    653: #include <sys/time.h>
                    654: #include <sys/types.h>
                    655:  ...
                    656: fd_set read_template;
                    657: struct timeval wait;
                    658:  ...
                    659: for (;;) {
                    660:        wait.tv_sec = 1;                /* one second */
                    661:        wait.tv_usec = 0;
                    662: 
                    663:        FD_ZERO(&read_template);
                    664: 
                    665:        FD_SET(s1, &read_template);
                    666:        FD_SET(s2, &read_template);
                    667: 
                    668:        nb = select(FD_SETSIZE, &read_template, (fd_set *) 0, (fd_set *) 0, &wait);
                    669:        if (nb <= 0) {
                    670:                \fIAn error occurred during the \fPselect\fI, or
                    671:                the \fPselect\fI timed out.\fP
                    672:        }
                    673: 
                    674:        if (FD_ISSET(s1, &read_template)) {
                    675:                \fISocket #1 is ready to be read from.\fP
                    676:        }
                    677: 
                    678:        if (FD_ISSET(s2, &read_template)) {
                    679:                \fISocket #2 is ready to be read from.\fP
                    680:        }
                    681: }
                    682: .DE
                    683: .PP
                    684: In 4.2, the arguments to \fIselect\fP were pointers to integers
                    685: instead of pointers to \fIfd_set\fPs.  This type of call
                    686: will still work as long as the number of file descriptors
                    687: being examined is less than the number of bits in an
                    688: integer; however, the methods illustrated above should
                    689: be used in all current programs.
                    690: .PP
                    691: \fISelect\fP provides a synchronous multiplexing scheme.
                    692: Asynchronous notification of output completion, input availability,
                    693: and exceptional conditions is possible through use of the
                    694: SIGIO and SIGURG signals described in section 5.

unix.superglobalmegacorp.com

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