1 #ifndef _SYS_SOCKET_H 2 #define _SYS_SOCKET_H 3 #ifdef __cplusplus 4 extern "C" { 5 #endif 6 7 #include <features.h> 8 9 #define __NEED_socklen_t 10 #define __NEED_sa_family_t 11 #define __NEED_size_t 12 #define __NEED_ssize_t 13 #define __NEED_uid_t 14 #define __NEED_pid_t 15 #define __NEED_gid_t 16 #define __NEED_struct_iovec 17 18 #include <bits/alltypes.h> 19 20 #include <bits/socket.h> 21 22 #ifdef __MUSL__ 23 #include <linux/socket.h> 24 #endif 25 26 struct msghdr { 27 void *msg_name; 28 socklen_t msg_namelen; 29 struct iovec *msg_iov; 30 #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __BIG_ENDIAN 31 int __pad1; 32 #endif 33 int msg_iovlen; 34 #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __LITTLE_ENDIAN 35 int __pad1; 36 #endif 37 void *msg_control; 38 #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __BIG_ENDIAN 39 int __pad2; 40 #endif 41 socklen_t msg_controllen; 42 #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __LITTLE_ENDIAN 43 int __pad2; 44 #endif 45 int msg_flags; 46 }; 47 48 struct cmsghdr { 49 #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __BIG_ENDIAN 50 int __pad1; 51 #endif 52 socklen_t cmsg_len; 53 #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __LITTLE_ENDIAN 54 int __pad1; 55 #endif 56 int cmsg_level; 57 int cmsg_type; 58 }; 59 60 #ifdef _GNU_SOURCE 61 struct ucred { 62 pid_t pid; 63 uid_t uid; 64 gid_t gid; 65 }; 66 67 struct mmsghdr { 68 struct msghdr msg_hdr; 69 unsigned int msg_len; 70 }; 71 72 struct timespec; 73 74 int sendmmsg (int, struct mmsghdr *, unsigned int, unsigned int); 75 int recvmmsg (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *); 76 #endif 77 78 struct linger { 79 int l_onoff; 80 int l_linger; 81 }; 82 83 #define SHUT_RD 0 84 #define SHUT_WR 1 85 #define SHUT_RDWR 2 86 87 #ifndef SOCK_STREAM 88 #define SOCK_STREAM 1 89 #define SOCK_DGRAM 2 90 #endif 91 92 #define SOCK_RAW 3 93 #define SOCK_RDM 4 94 #define SOCK_SEQPACKET 5 95 #define SOCK_DCCP 6 96 #define SOCK_PACKET 10 97 98 #ifndef SOCK_CLOEXEC 99 #define SOCK_CLOEXEC 02000000 100 #define SOCK_NONBLOCK 04000 101 #endif 102 103 #define PF_UNSPEC 0 104 #define PF_LOCAL 1 105 #define PF_UNIX PF_LOCAL 106 #define PF_FILE PF_LOCAL 107 #define PF_INET 2 108 #define PF_AX25 3 109 #define PF_IPX 4 110 #define PF_APPLETALK 5 111 #define PF_NETROM 6 112 #define PF_BRIDGE 7 113 #define PF_ATMPVC 8 114 #define PF_X25 9 115 #define PF_INET6 10 116 #define PF_ROSE 11 117 #define PF_DECnet 12 118 #define PF_NETBEUI 13 119 #define PF_SECURITY 14 120 #define PF_KEY 15 121 #define PF_NETLINK 16 122 #define PF_ROUTE PF_NETLINK 123 #define PF_PACKET 17 124 #define PF_ASH 18 125 #define PF_ECONET 19 126 #define PF_ATMSVC 20 127 #define PF_RDS 21 128 #define PF_SNA 22 129 #define PF_IRDA 23 130 #define PF_PPPOX 24 131 #define PF_WANPIPE 25 132 #define PF_LLC 26 133 #define PF_IB 27 134 #define PF_MPLS 28 135 #define PF_CAN 29 136 #define PF_TIPC 30 137 #define PF_BLUETOOTH 31 138 #define PF_IUCV 32 139 #define PF_RXRPC 33 140 #define PF_ISDN 34 141 #define PF_PHONET 35 142 #define PF_IEEE802154 36 143 #define PF_CAIF 37 144 #define PF_ALG 38 145 #define PF_NFC 39 146 #define PF_VSOCK 40 147 #define PF_KCM 41 148 #define PF_QIPCRTR 42 149 #define PF_SMC 43 150 #define PF_XDP 44 151 #define PF_MAX 45 152 153 #define AF_UNSPEC PF_UNSPEC 154 #define AF_LOCAL PF_LOCAL 155 #define AF_UNIX AF_LOCAL 156 #define AF_FILE AF_LOCAL 157 #define AF_INET PF_INET 158 #define AF_AX25 PF_AX25 159 #define AF_IPX PF_IPX 160 #define AF_APPLETALK PF_APPLETALK 161 #define AF_NETROM PF_NETROM 162 #define AF_BRIDGE PF_BRIDGE 163 #define AF_ATMPVC PF_ATMPVC 164 #define AF_X25 PF_X25 165 #define AF_INET6 PF_INET6 166 #define AF_ROSE PF_ROSE 167 #define AF_DECnet PF_DECnet 168 #define AF_NETBEUI PF_NETBEUI 169 #define AF_SECURITY PF_SECURITY 170 #define AF_KEY PF_KEY 171 #define AF_NETLINK PF_NETLINK 172 #define AF_ROUTE PF_ROUTE 173 #define AF_PACKET PF_PACKET 174 #define AF_ASH PF_ASH 175 #define AF_ECONET PF_ECONET 176 #define AF_ATMSVC PF_ATMSVC 177 #define AF_RDS PF_RDS 178 #define AF_SNA PF_SNA 179 #define AF_IRDA PF_IRDA 180 #define AF_PPPOX PF_PPPOX 181 #define AF_WANPIPE PF_WANPIPE 182 #define AF_LLC PF_LLC 183 #define AF_IB PF_IB 184 #define AF_MPLS PF_MPLS 185 #define AF_CAN PF_CAN 186 #define AF_TIPC PF_TIPC 187 #define AF_BLUETOOTH PF_BLUETOOTH 188 #define AF_IUCV PF_IUCV 189 #define AF_RXRPC PF_RXRPC 190 #define AF_ISDN PF_ISDN 191 #define AF_PHONET PF_PHONET 192 #define AF_IEEE802154 PF_IEEE802154 193 #define AF_CAIF PF_CAIF 194 #define AF_ALG PF_ALG 195 #define AF_NFC PF_NFC 196 #define AF_VSOCK PF_VSOCK 197 #define AF_KCM PF_KCM 198 #define AF_QIPCRTR PF_QIPCRTR 199 #define AF_SMC PF_SMC 200 #define AF_XDP PF_XDP 201 #define AF_MAX PF_MAX 202 203 #ifndef SO_DEBUG 204 #define SO_DEBUG 1 205 #define SO_REUSEADDR 2 206 #define SO_TYPE 3 207 #define SO_ERROR 4 208 #define SO_DONTROUTE 5 209 #define SO_BROADCAST 6 210 #define SO_SNDBUF 7 211 #define SO_RCVBUF 8 212 #define SO_KEEPALIVE 9 213 #define SO_OOBINLINE 10 214 #define SO_NO_CHECK 11 215 #define SO_PRIORITY 12 216 #define SO_LINGER 13 217 #define SO_BSDCOMPAT 14 218 #define SO_REUSEPORT 15 219 #define SO_PASSCRED 16 220 #define SO_PEERCRED 17 221 #define SO_RCVLOWAT 18 222 #define SO_SNDLOWAT 19 223 #define SO_ACCEPTCONN 30 224 #define SO_PEERSEC 31 225 #define SO_SNDBUFFORCE 32 226 #define SO_RCVBUFFORCE 33 227 #define SO_PROTOCOL 38 228 #define SO_DOMAIN 39 229 #endif 230 231 #ifndef SO_RCVTIMEO 232 #if __LONG_MAX == 0x7fffffff 233 #define SO_RCVTIMEO 66 234 #define SO_SNDTIMEO 67 235 #else 236 #define SO_RCVTIMEO 20 237 #define SO_SNDTIMEO 21 238 #endif 239 #endif 240 241 #ifndef SO_TIMESTAMP 242 #if __LONG_MAX == 0x7fffffff 243 #define SO_TIMESTAMP 63 244 #define SO_TIMESTAMPNS 64 245 #define SO_TIMESTAMPING 65 246 #else 247 #define SO_TIMESTAMP 29 248 #define SO_TIMESTAMPNS 35 249 #define SO_TIMESTAMPING 37 250 #endif 251 #endif 252 253 #define SO_SECURITY_AUTHENTICATION 22 254 #define SO_SECURITY_ENCRYPTION_TRANSPORT 23 255 #define SO_SECURITY_ENCRYPTION_NETWORK 24 256 257 #define SO_BINDTODEVICE 25 258 259 #define SO_ATTACH_FILTER 26 260 #define SO_DETACH_FILTER 27 261 #define SO_GET_FILTER SO_ATTACH_FILTER 262 263 #define SO_PEERNAME 28 264 #define SCM_TIMESTAMP SO_TIMESTAMP 265 #define SO_PASSSEC 34 266 #define SCM_TIMESTAMPNS SO_TIMESTAMPNS 267 #define SO_MARK 36 268 #define SCM_TIMESTAMPING SO_TIMESTAMPING 269 #define SO_RXQ_OVFL 40 270 #define SO_WIFI_STATUS 41 271 #define SCM_WIFI_STATUS SO_WIFI_STATUS 272 #define SO_PEEK_OFF 42 273 #define SO_NOFCS 43 274 #define SO_LOCK_FILTER 44 275 #define SO_SELECT_ERR_QUEUE 45 276 #define SO_BUSY_POLL 46 277 #define SO_MAX_PACING_RATE 47 278 #define SO_BPF_EXTENSIONS 48 279 #define SO_INCOMING_CPU 49 280 #define SO_ATTACH_BPF 50 281 #define SO_DETACH_BPF SO_DETACH_FILTER 282 #define SO_ATTACH_REUSEPORT_CBPF 51 283 #define SO_ATTACH_REUSEPORT_EBPF 52 284 #define SO_CNX_ADVICE 53 285 #define SCM_TIMESTAMPING_OPT_STATS 54 286 #define SO_MEMINFO 55 287 #define SO_INCOMING_NAPI_ID 56 288 #define SO_COOKIE 57 289 #define SCM_TIMESTAMPING_PKTINFO 58 290 #define SO_PEERGROUPS 59 291 #define SO_ZEROCOPY 60 292 #define SO_TXTIME 61 293 #define SCM_TXTIME SO_TXTIME 294 #define SO_BINDTOIFINDEX 62 295 #define SO_DETACH_REUSEPORT_BPF 68 296 297 #ifndef SOL_SOCKET 298 #define SOL_SOCKET 1 299 #endif 300 301 #define SOL_IP 0 302 #define SOL_IPV6 41 303 #define SOL_ICMPV6 58 304 305 #define SOL_RAW 255 306 #define SOL_DECNET 261 307 #define SOL_X25 262 308 #define SOL_PACKET 263 309 #define SOL_ATM 264 310 #define SOL_AAL 265 311 #define SOL_IRDA 266 312 #define SOL_NETBEUI 267 313 #define SOL_LLC 268 314 #define SOL_DCCP 269 315 #define SOL_NETLINK 270 316 #define SOL_TIPC 271 317 #define SOL_RXRPC 272 318 #define SOL_PPPOL2TP 273 319 #define SOL_BLUETOOTH 274 320 #define SOL_PNPIPE 275 321 #define SOL_RDS 276 322 #define SOL_IUCV 277 323 #define SOL_CAIF 278 324 #define SOL_ALG 279 325 #define SOL_NFC 280 326 #define SOL_KCM 281 327 #define SOL_TLS 282 328 #define SOL_XDP 283 329 330 #define SOMAXCONN 128 331 332 #define MSG_OOB 0x0001 333 #define MSG_PEEK 0x0002 334 #define MSG_DONTROUTE 0x0004 335 #define MSG_CTRUNC 0x0008 336 #define MSG_PROXY 0x0010 337 #define MSG_TRUNC 0x0020 338 #define MSG_DONTWAIT 0x0040 339 #define MSG_EOR 0x0080 340 #define MSG_WAITALL 0x0100 341 #define MSG_FIN 0x0200 342 #define MSG_SYN 0x0400 343 #define MSG_CONFIRM 0x0800 344 #define MSG_RST 0x1000 345 #define MSG_ERRQUEUE 0x2000 346 #define MSG_NOSIGNAL 0x4000 347 #define MSG_MORE 0x8000 348 #define MSG_WAITFORONE 0x10000 349 #define MSG_BATCH 0x40000 350 #define MSG_ZEROCOPY 0x4000000 351 #define MSG_FASTOPEN 0x20000000 352 #define MSG_CMSG_CLOEXEC 0x40000000 353 354 #define __CMSG_LEN(cmsg) (((cmsg)->cmsg_len + sizeof(long) - 1) & ~(long)(sizeof(long) - 1)) 355 #define __CMSG_NEXT(cmsg) ((unsigned char *)(cmsg) + __CMSG_LEN(cmsg)) 356 #define __MHDR_END(mhdr) ((unsigned char *)(mhdr)->msg_control + (mhdr)->msg_controllen) 357 358 #define CMSG_DATA(cmsg) ((unsigned char *) (((struct cmsghdr *)(cmsg)) + 1)) 359 #define CMSG_NXTHDR(mhdr, cmsg) ((cmsg)->cmsg_len < sizeof (struct cmsghdr) || \ 360 __CMSG_LEN(cmsg) + sizeof(struct cmsghdr) >= __MHDR_END(mhdr) - (unsigned char *)(cmsg) \ 361 ? 0 : (struct cmsghdr *)__CMSG_NEXT(cmsg)) 362 #define CMSG_FIRSTHDR(mhdr) ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0) 363 364 #define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)) 365 #define CMSG_SPACE(len) (CMSG_ALIGN (len) + CMSG_ALIGN (sizeof (struct cmsghdr))) 366 #define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) 367 368 #define SCM_RIGHTS 0x01 369 #define SCM_CREDENTIALS 0x02 370 371 struct sockaddr { 372 sa_family_t sa_family; 373 char sa_data[14]; 374 }; 375 376 #ifndef __MUSL__ 377 struct sockaddr_storage { 378 sa_family_t ss_family; 379 char __ss_padding[128-sizeof(long)-sizeof(sa_family_t)]; 380 unsigned long __ss_align; 381 }; 382 #endif 383 384 int socket (int, int, int); 385 int socketpair (int, int, int, int [2]); 386 387 int shutdown (int, int); 388 389 int bind (int, const struct sockaddr *, socklen_t); 390 int connect (int, const struct sockaddr *, socklen_t); 391 int listen (int, int); 392 int accept (int, struct sockaddr *__restrict, socklen_t *__restrict); 393 int accept4(int, struct sockaddr *__restrict, socklen_t *__restrict, int); 394 395 int getsockname (int, struct sockaddr *__restrict, socklen_t *__restrict); 396 int getpeername (int, struct sockaddr *__restrict, socklen_t *__restrict); 397 398 ssize_t send (int, const void *, size_t, int); 399 ssize_t recv (int, void *, size_t, int); 400 ssize_t sendto (int, const void *, size_t, int, const struct sockaddr *, socklen_t); 401 ssize_t recvfrom (int, void *__restrict, size_t, int, struct sockaddr *__restrict, socklen_t *__restrict); 402 ssize_t sendmsg (int, const struct msghdr *, int); 403 ssize_t recvmsg (int, struct msghdr *, int); 404 405 int getsockopt (int, int, int, void *__restrict, socklen_t *__restrict); 406 int setsockopt (int, int, int, const void *, socklen_t); 407 408 int sockatmark (int); 409 410 #if _REDIR_TIME64 411 #ifdef _GNU_SOURCE 412 __REDIR(recvmmsg, __recvmmsg_time64); 413 #endif 414 #endif 415 416 #include <fortify/socket.h> 417 418 #ifdef __cplusplus 419 } 420 #endif 421 #endif 422