1#ifndef _SYS_SOCKET_H 2#define _SYS_SOCKET_H 3#ifdef __cplusplus 4extern "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#if defined(__MUSL__) && (!defined(__LITEOS__)) 23#include <linux/socket.h> 24#endif 25 26struct 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 48struct 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 61struct ucred { 62 pid_t pid; 63 uid_t uid; 64 gid_t gid; 65}; 66 67struct mmsghdr { 68 struct msghdr msg_hdr; 69 unsigned int msg_len; 70}; 71 72struct timespec; 73 74int sendmmsg (int, struct mmsghdr *, unsigned int, unsigned int); 75int recvmmsg (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *); 76#endif 77 78struct 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#define SO_PREFER_BUSY_POLL 69 297#define SO_BUSY_POLL_BUDGET 70 298 299#ifndef SOL_SOCKET 300#define SOL_SOCKET 1 301#endif 302 303#define SOL_IP 0 304#define SOL_IPV6 41 305#define SOL_ICMPV6 58 306 307#define SOL_RAW 255 308#define SOL_DECNET 261 309#define SOL_X25 262 310#define SOL_PACKET 263 311#define SOL_ATM 264 312#define SOL_AAL 265 313#define SOL_IRDA 266 314#define SOL_NETBEUI 267 315#define SOL_LLC 268 316#define SOL_DCCP 269 317#define SOL_NETLINK 270 318#define SOL_TIPC 271 319#define SOL_RXRPC 272 320#define SOL_PPPOL2TP 273 321#define SOL_BLUETOOTH 274 322#define SOL_PNPIPE 275 323#define SOL_RDS 276 324#define SOL_IUCV 277 325#define SOL_CAIF 278 326#define SOL_ALG 279 327#define SOL_NFC 280 328#define SOL_KCM 281 329#define SOL_TLS 282 330#define SOL_XDP 283 331 332#define SOMAXCONN 128 333 334#define MSG_OOB 0x0001 335#define MSG_PEEK 0x0002 336#define MSG_DONTROUTE 0x0004 337#define MSG_CTRUNC 0x0008 338#define MSG_PROXY 0x0010 339#define MSG_TRUNC 0x0020 340#define MSG_DONTWAIT 0x0040 341#define MSG_EOR 0x0080 342#define MSG_WAITALL 0x0100 343#define MSG_FIN 0x0200 344#define MSG_SYN 0x0400 345#define MSG_CONFIRM 0x0800 346#define MSG_RST 0x1000 347#define MSG_ERRQUEUE 0x2000 348#define MSG_NOSIGNAL 0x4000 349#define MSG_MORE 0x8000 350#define MSG_WAITFORONE 0x10000 351#define MSG_BATCH 0x40000 352#define MSG_ZEROCOPY 0x4000000 353#define MSG_FASTOPEN 0x20000000 354#define MSG_CMSG_CLOEXEC 0x40000000 355 356#define __CMSG_LEN(cmsg) (((cmsg)->cmsg_len + sizeof(long) - 1) & ~(long)(sizeof(long) - 1)) 357#define __CMSG_NEXT(cmsg) ((unsigned char *)(cmsg) + __CMSG_LEN(cmsg)) 358#define __MHDR_END(mhdr) ((unsigned char *)(mhdr)->msg_control + (mhdr)->msg_controllen) 359 360#define CMSG_DATA(cmsg) ((unsigned char *) (((struct cmsghdr *)(cmsg)) + 1)) 361#define CMSG_NXTHDR(mhdr, cmsg) ((cmsg)->cmsg_len < sizeof (struct cmsghdr) || \ 362 __CMSG_NEXT(cmsg) + sizeof(struct cmsghdr) >= __MHDR_END(mhdr) ? 0 : (struct cmsghdr *)__CMSG_NEXT(cmsg)) 363#define CMSG_FIRSTHDR(mhdr) ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0) 364 365#define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)) 366#define CMSG_SPACE(len) (CMSG_ALIGN (len) + CMSG_ALIGN (sizeof (struct cmsghdr))) 367#define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) 368 369#define SCM_RIGHTS 0x01 370#define SCM_CREDENTIALS 0x02 371 372struct sockaddr { 373 sa_family_t sa_family; 374 char sa_data[14]; 375}; 376 377#if (!defined(__MUSL__)) || defined(__LITEOS__) 378struct sockaddr_storage { 379 sa_family_t ss_family; 380 char __ss_padding[128-sizeof(long)-sizeof(sa_family_t)]; 381 unsigned long __ss_align; 382}; 383#endif 384 385int socket (int, int, int); 386int socketpair (int, int, int, int [2]); 387 388int shutdown (int, int); 389 390int bind (int, const struct sockaddr *, socklen_t); 391int connect (int, const struct sockaddr *, socklen_t); 392int listen (int, int); 393int accept (int, struct sockaddr *__restrict, socklen_t *__restrict); 394int accept4(int, struct sockaddr *__restrict, socklen_t *__restrict, int); 395 396int getsockname (int, struct sockaddr *__restrict, socklen_t *__restrict); 397int getpeername (int, struct sockaddr *__restrict, socklen_t *__restrict); 398 399ssize_t send (int, const void *, size_t, int); 400ssize_t recv (int, void *, size_t, int); 401ssize_t sendto (int, const void *, size_t, int, const struct sockaddr *, socklen_t); 402ssize_t recvfrom (int, void *__restrict, size_t, int, struct sockaddr *__restrict, socklen_t *__restrict); 403ssize_t sendmsg (int, const struct msghdr *, int); 404ssize_t recvmsg (int, struct msghdr *, int); 405 406int getsockopt (int, int, int, void *__restrict, socklen_t *__restrict); 407int setsockopt (int, int, int, const void *, socklen_t); 408 409int sockatmark (int); 410 411#if _REDIR_TIME64 412#ifdef _GNU_SOURCE 413__REDIR(recvmmsg, __recvmmsg_time64); 414#endif 415#endif 416 417#ifndef __LITEOS__ 418#include <fortify/socket.h> 419#endif 420#ifdef __cplusplus 421} 422#endif 423#endif 424