Restore the "GPL licensing not permitted" in GLUT license headers.
[haiku.git] / headers / posix / sys / socket.h
blobec67563b8250503947ba132f77e48b034f1d107d
1 /*
2 * Copyright 2002-2012 Haiku, Inc. All Rights Reserved.
3 * Distributed under the terms of the MIT License.
4 */
5 #ifndef _SYS_SOCKET_H
6 #define _SYS_SOCKET_H
9 #include <stdint.h>
10 #include <sys/param.h>
11 #include <sys/types.h>
12 #include <sys/uio.h>
15 typedef uint32_t socklen_t;
16 typedef uint8_t sa_family_t;
18 /* Address families */
19 #define AF_UNSPEC 0
20 #define AF_INET 1
21 #define AF_APPLETALK 2
22 #define AF_ROUTE 3
23 #define AF_LINK 4
24 #define AF_INET6 5
25 #define AF_DLI 6
26 #define AF_IPX 7
27 #define AF_NOTIFY 8
28 #define AF_LOCAL 9
29 #define AF_UNIX AF_LOCAL
30 #define AF_BLUETOOTH 10
31 #define AF_MAX 11
33 /* Protocol families, deprecated */
34 #define PF_UNSPEC AF_UNSPEC
35 #define PF_INET AF_INET
36 #define PF_ROUTE AF_ROUTE
37 #define PF_LINK AF_LINK
38 #define PF_INET6 AF_INET6
39 #define PF_LOCAL AF_LOCAL
40 #define PF_UNIX AF_UNIX
41 #define PF_BLUETOOTH AF_BLUETOOTH
43 /* Socket types */
44 #define SOCK_STREAM 1
45 #define SOCK_DGRAM 2
46 #define SOCK_RAW 3
47 #define SOCK_SEQPACKET 5
48 #define SOCK_MISC 255
50 /* Socket options for SOL_SOCKET level */
51 #define SOL_SOCKET -1
53 #define SO_ACCEPTCONN 0x00000001 /* socket has had listen() */
54 #define SO_BROADCAST 0x00000002 /* permit sending of broadcast msgs */
55 #define SO_DEBUG 0x00000004 /* turn on debugging info recording */
56 #define SO_DONTROUTE 0x00000008 /* just use interface addresses */
57 #define SO_KEEPALIVE 0x00000010 /* keep connections alive */
58 #define SO_OOBINLINE 0x00000020 /* leave received OOB data in line */
59 #define SO_REUSEADDR 0x00000040 /* allow local address reuse */
60 #define SO_REUSEPORT 0x00000080 /* allow local address & port reuse */
61 #define SO_USELOOPBACK 0x00000100 /* bypass hardware when possible */
62 #define SO_LINGER 0x00000200 /* linger on close if data present */
64 #define SO_SNDBUF 0x40000001 /* send buffer size */
65 #define SO_SNDLOWAT 0x40000002 /* send low-water mark */
66 #define SO_SNDTIMEO 0x40000003 /* send timeout */
67 #define SO_RCVBUF 0x40000004 /* receive buffer size */
68 #define SO_RCVLOWAT 0x40000005 /* receive low-water mark */
69 #define SO_RCVTIMEO 0x40000006 /* receive timeout */
70 #define SO_ERROR 0x40000007 /* get error status and clear */
71 #define SO_TYPE 0x40000008 /* get socket type */
72 #define SO_NONBLOCK 0x40000009
73 #define SO_BINDTODEVICE 0x4000000a /* binds the socket to a specific device index */
74 #define SO_PEERCRED 0x4000000b /* get peer credentials, param: ucred */
76 /* Shutdown options */
77 #define SHUT_RD 0
78 #define SHUT_WR 1
79 #define SHUT_RDWR 2
81 #define SOMAXCONN 32 /* Max listen queue for a socket */
83 struct linger {
84 int l_onoff;
85 int l_linger;
88 struct sockaddr {
89 uint8_t sa_len;
90 sa_family_t sa_family;
91 uint8_t sa_data[30];
94 struct sockaddr_storage {
95 uint8_t ss_len; /* total length */
96 sa_family_t ss_family; /* address family */
97 uint8_t __ss_pad1[6]; /* align to quad */
98 uint64_t __ss_pad2; /* force alignment to 64 bit */
99 uint8_t __ss_pad3[112]; /* pad to a total of 128 bytes */
102 struct msghdr {
103 void *msg_name; /* address we're using (optional) */
104 socklen_t msg_namelen; /* length of address */
105 struct iovec *msg_iov; /* scatter/gather array we'll use */
106 int msg_iovlen; /* # elements in msg_iov */
107 void *msg_control; /* extra data */
108 socklen_t msg_controllen; /* length of extra data */
109 int msg_flags; /* flags */
112 /* Flags for the msghdr.msg_flags field */
113 #define MSG_OOB 0x0001 /* process out-of-band data */
114 #define MSG_PEEK 0x0002 /* peek at incoming message */
115 #define MSG_DONTROUTE 0x0004 /* send without using routing tables */
116 #define MSG_EOR 0x0008 /* data completes record */
117 #define MSG_TRUNC 0x0010 /* data discarded before delivery */
118 #define MSG_CTRUNC 0x0020 /* control data lost before delivery */
119 #define MSG_WAITALL 0x0040 /* wait for full request or error */
120 #define MSG_DONTWAIT 0x0080 /* this message should be nonblocking */
121 #define MSG_BCAST 0x0100 /* this message rec'd as broadcast */
122 #define MSG_MCAST 0x0200 /* this message rec'd as multicast */
123 #define MSG_EOF 0x0400 /* data completes connection */
124 #define MSG_NOSIGNAL 0x0800 /* don't raise SIGPIPE if socket is closed */
126 struct cmsghdr {
127 socklen_t cmsg_len;
128 int cmsg_level;
129 int cmsg_type;
130 /* data follows */
133 /* cmsghdr access macros */
134 #define CMSG_DATA(cmsg) ((unsigned char *)(cmsg) \
135 + _ALIGN(sizeof(struct cmsghdr)))
136 #define CMSG_NXTHDR(mhdr, cmsg) \
137 (((char *)(cmsg) + _ALIGN((cmsg)->cmsg_len) \
138 + _ALIGN(sizeof(struct cmsghdr)) \
139 > (char *)(mhdr)->msg_control + (mhdr)->msg_controllen) \
140 ? (struct cmsghdr *)NULL \
141 : (struct cmsghdr *)((char *)(cmsg) + _ALIGN((cmsg)->cmsg_len)))
142 #define CMSG_FIRSTHDR(mhdr) \
143 ((mhdr)->msg_controllen >= sizeof(struct cmsghdr) \
144 ? (struct cmsghdr *)(mhdr)->msg_control \
145 : (struct cmsghdr *)NULL)
146 #define CMSG_SPACE(len) (_ALIGN(sizeof(struct cmsghdr)) + _ALIGN(len))
147 #define CMSG_LEN(len) (_ALIGN(sizeof(struct cmsghdr)) + (len))
148 #define CMSG_ALIGN(len) _ALIGN(len)
150 /* SOL_SOCKET control message types */
151 #define SCM_RIGHTS 0x01
153 /* parameter to SO_PEERCRED */
154 struct ucred {
155 pid_t pid; /* PID of sender */
156 uid_t uid; /* UID of sender */
157 gid_t gid; /* GID of sender */
161 #if __cplusplus
162 extern "C" {
163 #endif
165 int accept(int socket, struct sockaddr *address, socklen_t *_addressLength);
166 int bind(int socket, const struct sockaddr *address,
167 socklen_t addressLength);
168 int connect(int socket, const struct sockaddr *address,
169 socklen_t addressLength);
170 int getpeername(int socket, struct sockaddr *address,
171 socklen_t *_addressLength);
172 int getsockname(int socket, struct sockaddr *address,
173 socklen_t *_addressLength);
174 int getsockopt(int socket, int level, int option, void *value,
175 socklen_t *_length);
176 int listen(int socket, int backlog);
177 ssize_t recv(int socket, void *buffer, size_t length, int flags);
178 ssize_t recvfrom(int socket, void *buffer, size_t bufferLength, int flags,
179 struct sockaddr *address, socklen_t *_addressLength);
180 ssize_t recvmsg(int socket, struct msghdr *message, int flags);
181 ssize_t send(int socket, const void *buffer, size_t length, int flags);
182 ssize_t sendmsg(int socket, const struct msghdr *message, int flags);
183 ssize_t sendto(int socket, const void *message, size_t length, int flags,
184 const struct sockaddr *address, socklen_t addressLength);
185 int setsockopt(int socket, int level, int option, const void *value,
186 socklen_t length);
187 int shutdown(int socket, int how);
188 int socket(int domain, int type, int protocol);
189 int sockatmark(int descriptor);
190 int socketpair(int domain, int type, int protocol, int socketVector[2]);
192 #if __cplusplus
194 #endif
196 #endif /* _SYS_SOCKET_H */