blob: dcd37208ff6a73024cbb57cb2b5536a4bd3790a5 [file] [log] [blame]
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -07001/*
Florin Corasc5df8c72019-04-08 07:42:30 -07002 * Copyright (c) 2017-2019 Cisco and/or its affiliates.
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -07003 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
Dave Wallace2a865272018-02-07 21:00:42 -050016#ifndef included_ldp_glibc_socket_h
17#define included_ldp_glibc_socket_h
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -070018
19#include <sys/types.h>
20#include <sys/socket.h>
21#include <sys/select.h>
22#include <arpa/inet.h>
23#include <fcntl.h>
24
25#include <sys/epoll.h>
shrinivasan ganapathy1d359632017-10-15 15:46:09 -070026
27#include <signal.h>
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -070028#include <poll.h>
29
30/*
31 *
32 * Generic glibc fd api
33 *
34 */
35/*
36 * glibc APIs from <unistd.h>
37 */
38
39/* Close the file descriptor FD.
40
41 This function is a cancellation point and therefore not marked with
42 __THROW. */
43extern int close (int __fd);
44
45/* Read NBYTES into BUF from FD. Return the
46 number read, -1 for errors or 0 for EOF.
47
48 This function is a cancellation point and therefore not marked with
49 __THROW. */
50extern ssize_t __wur read (int __fd, void *__buf, size_t __nbytes);
51
52/* Write N bytes of BUF to FD. Return the number written, or -1.
53
54 This function is a cancellation point and therefore not marked with
55 __THROW. */
56extern ssize_t __wur write (int __fd, const void *__buf, size_t __n);
57
58
59/*
60 * glibc APIs from <fcntl.h>
61 */
62
63/* Do the file control operation described by CMD on FD.
64 The remaining arguments are interpreted depending on CMD.
65
66 This function is a cancellation point and therefore not marked with
67 __THROW. */
68extern int fcntl (int __fd, int __cmd, ...);
69
70
71/*
72 * glibc APIs from <sys/select.h>
73 */
74
75/* Check the first NFDS descriptors each in READFDS (if not NULL) for read
76 readiness, in WRITEFDS (if not NULL) for write readiness, and in EXCEPTFDS
77 (if not NULL) for exceptional conditions. If TIMEOUT is not NULL, time out
78 after waiting the interval specified therein. Returns the number of ready
79 descriptors, or -1 for errors.
80
81
82 This function is a cancellation point and therefore not marked with
83 __THROW. */
84extern int
85select (int __nfds, fd_set * __restrict __readfds,
86 fd_set * __restrict __writefds,
87 fd_set * __restrict __exceptfds,
88 struct timeval *__restrict __timeout);
89
90#ifdef __USE_XOPEN2K
91/* Same as above only that the TIMEOUT value is given with higher
92 resolution and a sigmask which is been set temporarily. This version
93 should be used.
94
95 This function is a cancellation point and therefore not marked with
96 __THROW. */
97extern int
98pselect (int __nfds, fd_set * __restrict __readfds,
99 fd_set * __restrict __writefds,
100 fd_set * __restrict __exceptfds,
101 const struct timespec *__restrict __timeout,
102 const __sigset_t * __restrict __sigmask);
103#endif
104
105
106/*
107 *
108 * Socket specific glibc api
109 *
110 */
111
112/*
113 * glibc APIs from <sys/socket.h>
114 */
115
116/* Create a new socket of type TYPE in domain DOMAIN, using
117 protocol PROTOCOL. If PROTOCOL is zero, one is chosen automatically.
118 Returns a file descriptor for the new socket, or -1 for errors. */
119extern int __THROW socket (int __domain, int __type, int __protocol);
120
121/* Create two new sockets, of type TYPE in domain DOMAIN and using
122 protocol PROTOCOL, which are connected to each other, and put file
123 descriptors for them in FDS[0] and FDS[1]. If PROTOCOL is zero,
124 one will be chosen automatically. Returns 0 on success, -1 for errors. */
125extern int __THROW
126socketpair (int __domain, int __type, int __protocol, int __fds[2]);
127
128/* Give the socket FD the local address ADDR (which is LEN bytes long). */
129extern int __THROW
130bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
131
132/* Put the local address of FD into *ADDR and its length in *LEN. */
133extern int __THROW
134getsockname (int __fd, __SOCKADDR_ARG __addr, socklen_t * __restrict __len);
135
136/* Open a connection on socket FD to peer at ADDR (which LEN bytes long).
137 For connectionless socket types, just set the default address to send to
138 and the only address from which to accept transmissions.
139 Return 0 on success, -1 for errors.
140
141 This function is a cancellation point and therefore not marked with
142 __THROW. */
143extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);
144
145/* Put the address of the peer connected to socket FD into *ADDR
146 (which is *LEN bytes long), and its actual length into *LEN. */
147extern int __THROW
148getpeername (int __fd, __SOCKADDR_ARG __addr, socklen_t * __restrict __len);
149
150/* Send N bytes of BUF to socket FD. Returns the number sent or -1.
151
152 This function is a cancellation point and therefore not marked with
153 __THROW. */
154extern ssize_t send (int __fd, const void *__buf, size_t __n, int __flags);
155
Dave Wallace227867f2017-11-13 21:21:53 -0500156extern ssize_t sendfile (int __out_fd, int __in_fd, off_t * __offset,
157 size_t __len);
158
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700159/* Read N bytes into BUF from socket FD.
160 Returns the number read or -1 for errors.
161
162 This function is a cancellation point and therefore not marked with
163 __THROW. */
164extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags);
165
Sivaprasad Tummalafdcbd382021-07-31 21:38:19 +0530166/* Read N bytes into BUF from socket FD with buffer overflow checking.
167 Returns the number read or -1 for errors.
168
169 This function is a cancellation point and therefore not marked with
170 __THROW. */
171extern ssize_t __recv_chk (int fd, void *buf, size_t n, size_t buflen,
172 int flags);
173
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700174/* Send N bytes of BUF on socket FD to peer at address ADDR (which is
175 ADDR_LEN bytes long). Returns the number sent, or -1 for errors.
176
177 This function is a cancellation point and therefore not marked with
178 __THROW. */
179extern ssize_t
180sendto (int __fd, const void *__buf, size_t __n,
181 int __flags, __CONST_SOCKADDR_ARG __addr, socklen_t __addr_len);
182
183/* Read N bytes into BUF through socket FD.
184 If ADDR is not NULL, fill in *ADDR_LEN bytes of it with tha address of
185 the sender, and store the actual size of the address in *ADDR_LEN.
186 Returns the number of bytes read or -1 for errors.
187
188 This function is a cancellation point and therefore not marked with
189 __THROW. */
190extern ssize_t
191recvfrom (int __fd, void *__restrict __buf,
192 size_t __n, int __flags,
193 __SOCKADDR_ARG __addr, socklen_t * __restrict __addr_len);
194
195/* Send a message described MESSAGE on socket FD.
196 Returns the number of bytes sent, or -1 for errors.
197
198 This function is a cancellation point and therefore not marked with
199 __THROW. */
200extern ssize_t
201sendmsg (int __fd, const struct msghdr *__message, int __flags);
202
Florin Coras36847942023-02-02 12:56:16 -0800203#ifdef _GNU_SOURCE
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700204/* Send a VLEN messages as described by VMESSAGES to socket FD.
205 Returns the number of datagrams successfully written or -1 for errors.
206
207 This function is a cancellation point and therefore not marked with
208 __THROW. */
Florin Coras36847942023-02-02 12:56:16 -0800209extern int sendmmsg (int __fd, struct mmsghdr *__vmessages,
210 unsigned int __vlen, int __flags);
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700211#endif
212
213/* Receive a message as described by MESSAGE from socket FD.
214 Returns the number of bytes read or -1 for errors.
215
216 This function is a cancellation point and therefore not marked with
217 __THROW. */
218extern ssize_t recvmsg (int __fd, struct msghdr *__message, int __flags);
219
Florin Coras36847942023-02-02 12:56:16 -0800220#ifdef _GNU_SOURCE
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700221/* Receive up to VLEN messages as described by VMESSAGES from socket FD.
222 Returns the number of messages received or -1 for errors.
223
224 This function is a cancellation point and therefore not marked with
225 __THROW. */
226extern int
227recvmmsg (int __fd, struct mmsghdr *__vmessages,
228 unsigned int __vlen, int __flags, struct timespec *__tmo);
229#endif
230
231
232/* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
233 into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
234 actual length. Returns 0 on success, -1 for errors. */
235extern int __THROW
236getsockopt (int __fd, int __level, int __optname,
237 void *__restrict __optval, socklen_t * __restrict __optlen);
238
239/* Set socket FD's option OPTNAME at protocol level LEVEL
240 to *OPTVAL (which is OPTLEN bytes long).
241 Returns 0 on success, -1 for errors. */
242extern int __THROW
243setsockopt (int __fd, int __level, int __optname,
244 const void *__optval, socklen_t __optlen);
245
246/* Prepare to accept connections on socket FD.
247 N connection requests will be queued before further requests are refused.
248 Returns 0 on success, -1 for errors. */
249extern int __THROW listen (int __fd, int __n);
250
251/* Await a connection on socket FD.
252 When a connection arrives, open a new socket to communicate with it,
253 set *ADDR (which is *ADDR_LEN bytes long) to the address of the connecting
254 peer and *ADDR_LEN to the address's actual length, and return the
255 new socket's descriptor, or -1 for errors.
256
257 This function is a cancellation point and therefore not marked with
258 __THROW. */
259extern int
260accept (int __fd, __SOCKADDR_ARG __addr, socklen_t * __restrict __addr_len);
261
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700262/* Similar to 'accept' but takes an additional parameter to specify flags.
263
264 This function is a cancellation point and therefore not marked with
265 __THROW. */
266 /* TBD: implemented later */
267extern int
268accept4 (int __fd, __SOCKADDR_ARG __addr,
269 socklen_t * __restrict __addr_len, int __flags);
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700270
271/* Shut down all or part of the connection open on socket FD.
272 HOW determines what to shut down:
273 SHUT_RD = No more receptions;
274 SHUT_WR = No more transmissions;
275 SHUT_RDWR = No more receptions or transmissions.
276 Returns 0 on success, -1 for errors. */
277extern int __THROW shutdown (int __fd, int __how);
278
279
280/*
281 * glibc APIs from <sys/epoll.h>
282 */
283
284/* Creates an epoll instance. Returns an fd for the new instance.
285 The "size" parameter is a hint specifying the number of file
286 descriptors to be associated with the new instance. The fd
287 returned by epoll_create() should be closed with close(). */
288extern int __THROW epoll_create (int __size);
289
290/* Same as epoll_create but with an FLAGS parameter. The unused SIZE
291 parameter has been dropped. */
292extern int __THROW epoll_create1 (int __flags);
293
294/* Manipulate an epoll instance "epfd". Returns 0 in case of success,
295 -1 in case of error ( the "errno" variable will contain the
296 specific error code ) The "op" parameter is one of the EPOLL_CTL_*
297 constants defined above. The "fd" parameter is the target of the
298 operation. The "event" parameter describes which events the caller
299 is interested in and any associated user data. */
300extern int __THROW
301epoll_ctl (int __epfd, int __op, int __fd, struct epoll_event *__event);
302
303#define EP_INT_MAX ((int)(~0U>>1))
304#define EP_MAX_EVENTS (EP_INT_MAX / sizeof(struct epoll_event))
305
306/* Wait for events on an epoll instance "epfd". Returns the number of
307 triggered events returned in "events" buffer. Or -1 in case of
308 error with the "errno" variable set to the specific error code. The
309 "events" parameter is a buffer that will contain triggered
310 events. The "maxevents" is the maximum number of events to be
311 returned ( usually size of "events" ). The "timeout" parameter
312 specifies the maximum wait time in milliseconds (-1 == infinite).
313
314 This function is a cancellation point and therefore not marked with
315 __THROW. */
316extern int
317epoll_wait (int __epfd, struct epoll_event *__events,
318 int __maxevents, int __timeout);
319
320/* Same as epoll_wait, but the thread's signal mask is temporarily
321 and atomically replaced with the one provided as parameter.
322
323 This function is a cancellation point and therefore not marked with
324 __THROW. */
325extern int
326epoll_pwait (int __epfd, struct epoll_event *__events,
327 int __maxevents, int __timeout, const __sigset_t * __ss);
328
329/* Poll the file descriptors described by the NFDS structures starting at
330 FDS. If TIMEOUT is nonzero and not -1, allow TIMEOUT milliseconds for
331 an event to occur; if TIMEOUT is -1, block until an event occurs.
332 Returns the number of file descriptors with events, zero if timed out,
333 or -1 for errors.
334
335 This function is a cancellation point and therefore not marked with
336 __THROW. */
337extern int poll (struct pollfd *__fds, nfds_t __nfds, int __timeout);
338
Florin Coras36847942023-02-02 12:56:16 -0800339#ifdef _GNU_SOURCE
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700340/* Like poll, but before waiting the threads signal mask is replaced
341 with that specified in the fourth parameter. For better usability,
342 the timeout value is specified using a TIMESPEC object.
343
344 This function is a cancellation point and therefore not marked with
345 __THROW. */
346extern int ppoll (struct pollfd *__fds, nfds_t __nfds,
347 const struct timespec *__timeout, const __sigset_t * __ss);
348#endif
349
350
Dave Wallace2a865272018-02-07 21:00:42 -0500351#endif /* included_ldp_glibc_socket_h */
Keith Burns (alagalah)b327c2b2017-10-09 08:52:59 -0700352
353/*
354 * fd.io coding-style-patch-verification: ON
355 *
356 * Local Variables:
357 * eval: (c-set-style "gnu")
358 * End:
359 */