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