|
|
1.1 root 1: .\" Copyright (c) 1983 The Regents of the University of California.
2: .\" All rights reserved.
3: .\"
4: .\" Redistribution and use in source and binary forms are permitted provided
5: .\" that: (1) source distributions retain this entire copyright notice and
6: .\" comment, and (2) distributions including binaries display the following
7: .\" acknowledgement: ``This product includes software developed by the
8: .\" University of California, Berkeley and its contributors'' in the
9: .\" documentation or other materials provided with the distribution and in
10: .\" all advertising materials mentioning features or use of this software.
11: .\" Neither the name of the University nor the names of its contributors may
12: .\" be used to endorse or promote products derived from this software without
13: .\" specific prior written permission.
14: .\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
15: .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
16: .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
17: .\"
18: .\" @(#)socket.2 6.7 (Berkeley) 6/23/90
19: .\"
20: .TH SOCKET 2 "June 23, 1990"
21: .UC 5
22: .SH NAME
23: socket \- create an endpoint for communication
24: .SH SYNOPSIS
25: .nf
26: .ft B
27: #include <sys/types.h>
28: #include <sys/socket.h>
29: .PP
30: .ft B
31: s = socket(domain, type, protocol)
32: int s, domain, type, protocol;
33: .fi
34: .SH DESCRIPTION
35: .I Socket
36: creates an endpoint for communication and returns a descriptor.
37: .PP
38: The
39: .I domain
40: parameter specifies a communications domain within which
41: communication will take place; this selects the protocol family
42: which should be used.
43: The protocol family generally is the same as the address family
44: for the addresses supplied in later operations on the socket.
45: These families are defined in the include file
46: .IR <sys/socket.h> .
47: The currently understood formats are
48: .PP
49: .RS
50: .nf
51: .ta 1.25i 1.75i
52: PF_UNIX (UNIX internal protocols),
53: PF_INET (ARPA Internet protocols),
54: PF_NS (Xerox Network Systems protocols), and
55: PF_IMPLINK (IMP \*(lqhost at IMP\*(rq link layer).
56: .fi
57: .RE
58: .PP
59: The socket has the indicated
60: .I type,
61: which specifies the semantics of communication. Currently
62: defined types are:
63: .PP
64: .RS
65: .nf
66: SOCK_STREAM
67: SOCK_DGRAM
68: SOCK_RAW
69: SOCK_SEQPACKET
70: SOCK_RDM
71: .fi
72: .RE
73: .PP
74: A SOCK_STREAM type provides sequenced, reliable,
75: two-way connection based byte streams.
76: An out-of-band data transmission mechanism may be supported.
77: A SOCK_DGRAM socket supports
78: datagrams (connectionless, unreliable messages of
79: a fixed (typically small) maximum length).
80: A SOCK_SEQPACKET socket may provide a sequenced, reliable,
81: two-way connection-based data transmission path for datagrams
82: of fixed maximum length; a consumer may be required to read
83: an entire packet with each read system call.
84: This facility is protocol specific, and presently implemented
85: only for PF_NS.
86: SOCK_RAW sockets provide access to internal network protocols and interfaces.
87: The types SOCK_RAW,
88: which is available only to the super-user, and
89: SOCK_RDM, which is planned,
90: but not yet implemented, are not described here.
91: .PP
92: The
93: .I protocol
94: specifies a particular protocol to be used with the socket.
95: Normally only a single protocol exists to support a particular
96: socket type within a given protocol family. However, it is possible
97: that many protocols may exist, in which case a particular protocol
98: must be specified in this manner. The protocol number to use is
99: particular to the \*(lqcommunication domain\*(rq in which communication
100: is to take place; see
101: .IR protocols (3N).
102: .PP
103: Sockets of type SOCK_STREAM
104: are full-duplex byte streams, similar
105: to pipes. A stream socket must be in a
106: .I connected
107: state before any data may be sent or received
108: on it. A connection to another socket is created with a
109: .IR connect (2)
110: call. Once connected, data may be transferred using
111: .IR read (2)
112: and
113: .IR write (2)
114: calls or some variant of the
115: .IR send (2)
116: and
117: .IR recv (2)
118: calls. When a session has been completed a
119: .IR close (2)
120: may be performed.
121: Out-of-band data may also be transmitted as described in
122: .IR send (2)
123: and received as described in
124: .IR recv (2).
125: .PP
126: The communications protocols used to implement a
127: SOCK_STREAM insure that data
128: is not lost or duplicated. If a piece of data for which the
129: peer protocol has buffer space cannot be successfully transmitted
130: within a reasonable length of time, then
131: the connection is considered broken and calls
132: will indicate an error with
133: \-1 returns and with ETIMEDOUT as the specific code
134: in the global variable errno.
135: The protocols optionally keep sockets \*(lqwarm\*(rq by
136: forcing transmissions
137: roughly every minute in the absence of other activity.
138: An error is then indicated if no response can be
139: elicited on an otherwise
140: idle connection for a extended period (e.g. 5 minutes).
141: A SIGPIPE signal is raised if a process sends
142: on a broken stream; this causes naive processes,
143: which do not handle the signal, to exit.
144: .PP
145: SOCK_SEQPACKET sockets employ the same system calls
146: as SOCK_STREAM sockets. The only difference
147: is that
148: .IR read (2)
149: calls will return only the amount of data requested,
150: and any remaining in the arriving packet will be discarded.
151: .PP
152: SOCK_DGRAM and SOCK_RAW
153: sockets allow sending of datagrams to correspondents
154: named in
155: .IR send (2)
156: calls. Datagrams are generally received with
157: .IR recvfrom (2),
158: which returns the next datagram with its return address.
159: .PP
160: An
161: .IR fcntl (2)
162: call can be used to specify a process group to receive
163: a SIGURG signal when the out-of-band data arrives.
164: It may also enable non-blocking I/O
165: and asynchronous notification of I/O events
166: via SIGIO.
167: .PP
168: The operation of sockets is controlled by socket level
169: .IR options .
170: These options are defined in the file
171: .RI < sys/socket.h >.
172: .IR Setsockopt (2)
173: and
174: .IR getsockopt (2)
175: are used to set and get options, respectively.
176: .SH "RETURN VALUE
177: A \-1 is returned if an error occurs, otherwise the return
178: value is a descriptor referencing the socket.
179: .SH "ERRORS
180: The \fIsocket\fP call fails if:
181: .TP 20
182: [EPROTONOSUPPORT]
183: The protocol type or the specified protocol is not supported
184: within this domain.
185: .TP 20
186: [EMFILE]
187: The per-process descriptor table is full.
188: .TP 20
189: [ENFILE]
190: The system file table is full.
191: .TP 20
192: [EACCESS]
193: Permission to create a socket of the specified type and/or protocol
194: is denied.
195: .TP 20
196: [ENOBUFS]
197: Insufficient buffer space is available.
198: The socket cannot be created until sufficient resources are freed.
199: .SH SEE ALSO
200: accept(2), bind(2), connect(2), getsockname(2), getsockopt(2),
201: ioctl(2), listen(2), read(2), recv(2),
202: select(2), send(2), shutdown(2), socketpair(2), write(2)
203: .br
204: ``An Introductory 4.3BSD Interprocess Communication Tutorial.''
205: (reprinted in UNIX Programmer's Supplementary Documents Volume 1, PS1:7)
206: ``An Advanced 4.3BSD Interprocess Communication Tutorial.''
207: (reprinted in UNIX Programmer's Supplementary Documents Volume 1, PS1:8)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.