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