/* * Copyright (c) 2021-2021 Huawei Device Co., Ltd. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. * * 3. Neither the name of the copyright holder nor the names of its contributors may be used * to endorse or promote products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef _ADAPT_SYS_SOCKET_H #define _ADAPT_SYS_SOCKET_H #include #include #include #ifdef __cplusplus extern "C" { #endif typedef unsigned socklen_t; typedef unsigned short sa_family_t; struct msghdr { void *msg_name; socklen_t msg_namelen; struct iovec *msg_iov; #if LONG_MAX > 0x7fffffff && BYTE_ORDER == BIG_ENDIAN int __pad1; #endif int msg_iovlen; #if LONG_MAX > 0x7fffffff && BYTE_ORDER == LITTLE_ENDIAN int __pad1; #endif void *msg_control; #if LONG_MAX > 0x7fffffff && BYTE_ORDER == BIG_ENDIAN int __pad2; #endif socklen_t msg_controllen; #if LONG_MAX > 0x7fffffff && BYTE_ORDER == LITTLE_ENDIAN int __pad2; #endif int msg_flags; }; struct cmsghdr { #if LONG_MAX > 0x7fffffff && BYTE_ORDER == BIG_ENDIAN int __pad1; #endif socklen_t cmsg_len; #if LONG_MAX > 0x7fffffff && BYTE_ORDER == LITTLE_ENDIAN int __pad1; #endif int cmsg_level; int cmsg_type; }; #ifdef _GNU_SOURCE struct ucred { pid_t pid; uid_t uid; gid_t gid; }; struct mmsghdr { struct msghdr msg_hdr; unsigned int msg_len; }; struct timespec; int sendmmsg (int, struct mmsghdr *, unsigned int, unsigned int); int recvmmsg (int, struct mmsghdr *, unsigned int, unsigned int, struct timespec *); #endif struct linger { int l_onoff; int l_linger; }; #define SHUT_RD 0 #define SHUT_WR 1 #define SHUT_RDWR 2 #ifndef SOCK_STREAM #define SOCK_STREAM 1 #define SOCK_DGRAM 2 #endif #define SOCK_RAW 3 #define SOCK_RDM 4 #define SOCK_SEQPACKET 5 #define SOCK_DCCP 6 #define SOCK_PACKET 10 #ifndef SOCK_CLOEXEC #define SOCK_CLOEXEC 02000000 #define SOCK_NONBLOCK 04000 #endif #define PF_UNSPEC 0 #define PF_LOCAL 1 #define PF_UNIX PF_LOCAL #define PF_FILE PF_LOCAL #define PF_INET 2 #define PF_INET6 10 #define PF_IPX 4 #define AF_UNSPEC PF_UNSPEC #define AF_LOCAL PF_LOCAL #define AF_UNIX AF_LOCAL #define AF_FILE AF_LOCAL #define AF_INET PF_INET #define AF_INET6 PF_INET6 #define AF_IPX PF_IPX #ifndef SO_DEBUG #define SO_DEBUG 1 #define SO_REUSEADDR 2 #define SO_TYPE 3 #define SO_ERROR 4 #define SO_DONTROUTE 5 #define SO_BROADCAST 6 #define SO_SNDBUF 7 #define SO_RCVBUF 8 #define SO_KEEPALIVE 9 #define SO_OOBINLINE 10 #define SO_NO_CHECK 11 #define SO_PRIORITY 12 #define SO_LINGER 13 #define SO_BSDCOMPAT 14 #define SO_REUSEPORT 15 #define SO_PASSCRED 16 #define SO_PEERCRED 17 #define SO_RCVLOWAT 18 #define SO_SNDLOWAT 19 #define SO_ACCEPTCONN 30 #define SO_PEERSEC 31 #define SO_SNDBUFFORCE 32 #define SO_RCVBUFFORCE 33 #define SO_PROTOCOL 38 #define SO_DOMAIN 39 #endif #ifndef SO_RCVTIMEO #if LONG_MAX == 0x7fffffff #define SO_RCVTIMEO 66 #define SO_SNDTIMEO 67 #else #define SO_RCVTIMEO 20 #define SO_SNDTIMEO 21 #endif #endif #define SO_BINDTODEVICE 25 #ifndef SOL_SOCKET #define SOL_SOCKET 1 #endif #define SOL_IP 0 #define MSG_OOB 0x0001 #define MSG_PEEK 0x0002 #define MSG_DONTROUTE 0x0004 #define MSG_CTRUNC 0x0008 #define MSG_PROXY 0x0010 #define MSG_TRUNC 0x0020 #define MSG_DONTWAIT 0x0040 #define MSG_EOR 0x0080 #define MSG_WAITALL 0x0100 #define MSG_FIN 0x0200 #define MSG_SYN 0x0400 #define MSG_CONFIRM 0x0800 #define MSG_RST 0x1000 #define MSG_ERRQUEUE 0x2000 #define MSG_NOSIGNAL 0x4000 #define MSG_MORE 0x8000 #define MSG_WAITFORONE 0x10000 #define MSG_BATCH 0x40000 #define MSG_ZEROCOPY 0x4000000 #define MSG_FASTOPEN 0x20000000 #define MSG_CMSG_CLOEXEC 0x40000000 #define __CMSG_LEN(cmsg) (((cmsg)->cmsg_len + sizeof(long) - 1) & ~(long)(sizeof(long) - 1)) #define __CMSG_NEXT(cmsg) ((unsigned char *)(cmsg) + __CMSG_LEN(cmsg)) #define __MHDR_END(mhdr) ((unsigned char *)(mhdr)->msg_control + (mhdr)->msg_controllen) #define CMSG_DATA(cmsg) ((unsigned char *) (((struct cmsghdr *)(cmsg)) + 1)) #define CMSG_NXTHDR(mhdr, cmsg) ((cmsg)->cmsg_len < sizeof (struct cmsghdr) || \ __CMSG_LEN(cmsg) + sizeof(struct cmsghdr) >= __MHDR_END(mhdr) - (unsigned char *)(cmsg) \ ? 0 : (struct cmsghdr *)__CMSG_NEXT(cmsg)) #define CMSG_FIRSTHDR(mhdr) ((size_t) (mhdr)->msg_controllen >= sizeof (struct cmsghdr) ? (struct cmsghdr *) (mhdr)->msg_control : (struct cmsghdr *) 0) #define CMSG_ALIGN(len) (((len) + sizeof (size_t) - 1) & (size_t) ~(sizeof (size_t) - 1)) #define CMSG_SPACE(len) (CMSG_ALIGN (len) + CMSG_ALIGN (sizeof (struct cmsghdr))) #define CMSG_LEN(len) (CMSG_ALIGN (sizeof (struct cmsghdr)) + (len)) #define SCM_RIGHTS 0x01 #define SCM_CREDENTIALS 0x02 struct sockaddr { sa_family_t sa_family; char sa_data[14]; }; struct sockaddr_storage { sa_family_t ss_family; char __ss_padding[128 - sizeof(long) - sizeof(sa_family_t)]; unsigned long __ss_align; }; int socket(int, int, int); int socketpair(int, int, int, int [2]); int shutdown(int, int); int bind(int, const struct sockaddr *, socklen_t); int connect(int, const struct sockaddr *, socklen_t); int listen(int, int); int accept(int, struct sockaddr *__restrict, socklen_t *__restrict); int accept4(int, struct sockaddr *__restrict, socklen_t *__restrict, int); int getsockname(int, struct sockaddr *__restrict, socklen_t *__restrict); int getpeername(int, struct sockaddr *__restrict, socklen_t *__restrict); ssize_t send(int, const void *, size_t, int); ssize_t recv(int, void *, size_t, int); ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t); ssize_t recvfrom(int, void *__restrict, size_t, int, struct sockaddr *__restrict, socklen_t *__restrict); ssize_t sendmsg(int, const struct msghdr *, int); ssize_t recvmsg(int, struct msghdr *, int); int getsockopt(int, int, int, void *__restrict, socklen_t *__restrict); int setsockopt(int, int, int, const void *, socklen_t); int sockatmark(int); #ifdef __cplusplus } #endif #endif /* !_ADAPT_SYS_SOCKET_H */