#ifndef _SYS_SOCKET_H_
#define _SYS_SOCKET_H_
#include <sys/uio.h>
#if __BSD_VISIBLE
#include <sys/types.h>
#endif
#ifndef _SOCKLEN_T_DEFINED_
#define _SOCKLEN_T_DEFINED_
typedef __socklen_t socklen_t;
#endif
#ifndef _SA_FAMILY_T_DEFINED_
#define _SA_FAMILY_T_DEFINED_
typedef __sa_family_t sa_family_t;
#endif
#define SOCK_STREAM 1
#define SOCK_DGRAM 2
#define SOCK_RAW 3
#define SOCK_RDM 4
#define SOCK_SEQPACKET 5
#ifdef _KERNEL
#define SOCK_TYPE_MASK 0x000F
#endif
#if __POSIX_VISIBLE >= 202405 || __BSD_VISIBLE
#define SOCK_CLOEXEC 0x8000
#define SOCK_NONBLOCK 0x4000
#endif
#if __BSD_VISIBLE
#ifdef _KERNEL
#define SOCK_NONBLOCK_INHERIT 0x2000
#endif
#define SOCK_DNS 0x1000
#endif
#if __POSIX_VISIBLE >= 202405
#define SOCK_CLOFORK 0x0800
#endif
#define SO_DEBUG 0x0001
#define SO_ACCEPTCONN 0x0002
#define SO_REUSEADDR 0x0004
#define SO_KEEPALIVE 0x0008
#define SO_DONTROUTE 0x0010
#define SO_BROADCAST 0x0020
#define SO_USELOOPBACK 0x0040
#define SO_LINGER 0x0080
#define SO_OOBINLINE 0x0100
#define SO_REUSEPORT 0x0200
#define SO_TIMESTAMP 0x0800
#define SO_BINDANY 0x1000
#define SO_ZEROIZE 0x2000
#define SO_SNDBUF 0x1001
#define SO_RCVBUF 0x1002
#define SO_SNDLOWAT 0x1003
#define SO_RCVLOWAT 0x1004
#define SO_SNDTIMEO 0x1005
#define SO_RCVTIMEO 0x1006
#define SO_ERROR 0x1007
#define SO_TYPE 0x1008
#define SO_RTABLE 0x1021
#define SO_PEERCRED 0x1022
#define SO_SPLICE 0x1023
#define SO_DOMAIN 0x1024
#define SO_PROTOCOL 0x1025
struct linger {
int l_onoff;
int l_linger;
};
#if __BSD_VISIBLE
#ifndef _TIMEVAL_DECLARED
#define _TIMEVAL_DECLARED
struct timeval {
time_t tv_sec;
suseconds_t tv_usec;
};
#endif
struct splice {
int sp_fd;
off_t sp_max;
struct timeval sp_idle;
};
#define RT_TABLEID_MAX 255
#define RT_TABLEID_BITS 8
#define RT_TABLEID_MASK 0xff
#endif
#define SOL_SOCKET 0xffff
#define AF_UNSPEC 0
#define AF_UNIX 1
#define AF_LOCAL AF_UNIX
#define AF_INET 2
#define AF_IMPLINK 3
#define AF_PUP 4
#define AF_CHAOS 5
#define AF_NS 6
#define AF_ISO 7
#define AF_OSI AF_ISO
#define AF_ECMA 8
#define AF_DATAKIT 9
#define AF_CCITT 10
#define AF_SNA 11
#define AF_DECnet 12
#define AF_DLI 13
#define AF_LAT 14
#define AF_HYLINK 15
#define AF_APPLETALK 16
#define AF_ROUTE 17
#define AF_LINK 18
#define pseudo_AF_XTP 19
#define AF_COIP 20
#define AF_CNT 21
#define pseudo_AF_RTIP 22
#define AF_IPX 23
#define AF_INET6 24
#define pseudo_AF_PIP 25
#define AF_ISDN 26
#define AF_E164 AF_ISDN
#define AF_NATM 27
#define AF_ENCAP 28
#define AF_SIP 29
#define AF_KEY 30
#define pseudo_AF_HDRCMPLT 31
#define AF_BLUETOOTH 32
#define AF_MPLS 33
#define pseudo_AF_PFLOW 34
#define pseudo_AF_PIPEX 35
#define AF_FRAME 36
#define AF_MAX 37
struct sockaddr {
__uint8_t sa_len;
sa_family_t sa_family;
char sa_data[14];
};
struct sockaddr_storage {
__uint8_t ss_len;
sa_family_t ss_family;
unsigned char __ss_pad1[6];
__uint64_t __ss_pad2;
unsigned char __ss_pad3[240];
};
#ifdef _KERNEL
struct sockproto {
unsigned short sp_family;
unsigned short sp_protocol;
};
#endif
#define PF_UNSPEC AF_UNSPEC
#define PF_LOCAL AF_LOCAL
#define PF_UNIX AF_UNIX
#define PF_INET AF_INET
#define PF_IMPLINK AF_IMPLINK
#define PF_PUP AF_PUP
#define PF_CHAOS AF_CHAOS
#define PF_NS AF_NS
#define PF_ISO AF_ISO
#define PF_OSI AF_ISO
#define PF_ECMA AF_ECMA
#define PF_DATAKIT AF_DATAKIT
#define PF_CCITT AF_CCITT
#define PF_SNA AF_SNA
#define PF_DECnet AF_DECnet
#define PF_DLI AF_DLI
#define PF_LAT AF_LAT
#define PF_HYLINK AF_HYLINK
#define PF_APPLETALK AF_APPLETALK
#define PF_ROUTE AF_ROUTE
#define PF_LINK AF_LINK
#define PF_XTP pseudo_AF_XTP
#define PF_COIP AF_COIP
#define PF_CNT AF_CNT
#define PF_IPX AF_IPX
#define PF_INET6 AF_INET6
#define PF_RTIP pseudo_AF_RTIP
#define PF_PIP pseudo_AF_PIP
#define PF_ISDN AF_ISDN
#define PF_NATM AF_NATM
#define PF_ENCAP AF_ENCAP
#define PF_SIP AF_SIP
#define PF_KEY AF_KEY
#define PF_BPF pseudo_AF_HDRCMPLT
#define PF_BLUETOOTH AF_BLUETOOTH
#define PF_MPLS AF_MPLS
#define PF_PFLOW pseudo_AF_PFLOW
#define PF_PIPEX pseudo_AF_PIPEX
#define PF_FRAME AF_FRAME
#define PF_MAX AF_MAX
#define SHUT_RD 0
#define SHUT_WR 1
#define SHUT_RDWR 2
#if __BSD_VISIBLE
#define SA_LEN(x) ((x)->sa_len)
struct sockpeercred {
uid_t uid;
gid_t gid;
pid_t pid;
};
#define NET_MAXID AF_MAX
#define CTL_NET_NAMES { \
{ 0, 0 }, \
{ "unix", CTLTYPE_NODE }, \
{ "inet", CTLTYPE_NODE }, \
{ "implink", CTLTYPE_NODE }, \
{ "pup", CTLTYPE_NODE }, \
{ "chaos", CTLTYPE_NODE }, \
{ "xerox_ns", CTLTYPE_NODE }, \
{ "iso", CTLTYPE_NODE }, \
{ "ecma", CTLTYPE_NODE }, \
{ "datakit", CTLTYPE_NODE }, \
{ "ccitt", CTLTYPE_NODE }, \
{ "ibm_sna", CTLTYPE_NODE }, \
{ "decnet", CTLTYPE_NODE }, \
{ "dec_dli", CTLTYPE_NODE }, \
{ "lat", CTLTYPE_NODE }, \
{ "hylink", CTLTYPE_NODE }, \
{ "appletalk", CTLTYPE_NODE }, \
{ "route", CTLTYPE_NODE }, \
{ "link", CTLTYPE_NODE }, \
{ "xtp", CTLTYPE_NODE }, \
{ "coip", CTLTYPE_NODE }, \
{ "cnt", CTLTYPE_NODE }, \
{ "rtip", CTLTYPE_NODE }, \
{ "ipx", CTLTYPE_NODE }, \
{ "inet6", CTLTYPE_NODE }, \
{ "pip", CTLTYPE_NODE }, \
{ "isdn", CTLTYPE_NODE }, \
{ "natm", CTLTYPE_NODE }, \
{ "encap", CTLTYPE_NODE }, \
{ "sip", CTLTYPE_NODE }, \
{ "key", CTLTYPE_NODE }, \
{ "bpf", CTLTYPE_NODE }, \
{ "bluetooth", CTLTYPE_NODE }, \
{ "mpls", CTLTYPE_NODE }, \
{ "pflow", CTLTYPE_NODE }, \
{ "pipex", CTLTYPE_NODE }, \
}
#define NET_RT_DUMP 1
#define NET_RT_FLAGS 2
#define NET_RT_IFLIST 3
#define NET_RT_STATS 4
#define NET_RT_TABLE 5
#define NET_RT_IFNAMES 6
#define NET_RT_SOURCE 7
#define NET_RT_MAXID 8
#define CTL_NET_RT_NAMES { \
{ 0, 0 }, \
{ "dump", CTLTYPE_STRUCT }, \
{ "flags", CTLTYPE_STRUCT }, \
{ "iflist", CTLTYPE_STRUCT }, \
{ "stats", CTLTYPE_STRUCT }, \
{ "table", CTLTYPE_STRUCT }, \
{ "ifnames", CTLTYPE_STRUCT }, \
{ "source", CTLTYPE_STRUCT }, \
}
#define NET_UNIX_INFLIGHT 6
#define NET_UNIX_DEFERRED 7
#define NET_UNIX_MAXID 8
#define CTL_NET_UNIX_NAMES { \
{ 0, 0 }, \
{ "stream", CTLTYPE_NODE }, \
{ "dgram", CTLTYPE_NODE }, \
{ 0, 0 }, \
{ 0, 0 }, \
{ "seqpacket", CTLTYPE_NODE }, \
{ "inflight", CTLTYPE_INT }, \
{ "deferred", CTLTYPE_INT }, \
}
#define UNPCTL_RECVSPACE 1
#define UNPCTL_SENDSPACE 2
#define NET_UNIX_PROTO_MAXID 3
#define CTL_NET_UNIX_PROTO_NAMES { \
{ 0, 0 }, \
{ "recvspace", CTLTYPE_INT }, \
{ "sendspace", CTLTYPE_INT }, \
}
#define NET_LINK_IFRXQ 1
#define NET_LINK_MAXID 2
#define CTL_NET_LINK_NAMES { \
{ 0, 0 }, \
{ "ifrxq", CTLTYPE_NODE }, \
}
#define NET_LINK_IFRXQ_PRESSURE_RETURN \
1
#define NET_LINK_IFRXQ_PRESSURE_DROP \
2
#define NET_LINK_IFRXQ_MAXID 3
#define CTL_NET_LINK_IFRXQ_NAMES { \
{ 0, 0 }, \
{ "pressure_return", CTLTYPE_INT }, \
{ "pressure_drop", CTLTYPE_INT }, \
}
#define NET_KEY_SADB_DUMP 1
#define NET_KEY_SPD_DUMP 2
#define NET_KEY_MAXID 3
#define CTL_NET_KEY_NAMES { \
{ 0, 0 }, \
{ "sadb_dump", CTLTYPE_STRUCT }, \
{ "spd_dump", CTLTYPE_STRUCT }, \
}
#define NET_BPF_BUFSIZE 1
#define NET_BPF_MAXBUFSIZE 2
#define NET_BPF_MAXID 3
#define CTL_NET_BPF_NAMES { \
{ 0, 0 }, \
{ "bufsize", CTLTYPE_INT }, \
{ "maxbufsize", CTLTYPE_INT }, \
}
#define NET_PFLOW_STATS 1
#define NET_PFLOW_MAXID 2
#define CTL_NET_PFLOW_NAMES { \
{ 0, 0 }, \
{ "stats", CTLTYPE_STRUCT }, \
}
#endif
#define SOMAXCONN 128
struct msghdr {
void *msg_name;
socklen_t msg_namelen;
struct iovec *msg_iov;
unsigned int msg_iovlen;
void *msg_control;
socklen_t msg_controllen;
int msg_flags;
};
struct mmsghdr {
struct msghdr msg_hdr;
unsigned int msg_len;
};
struct timespec;
#define MSG_OOB 0x1
#define MSG_PEEK 0x2
#define MSG_DONTROUTE 0x4
#define MSG_EOR 0x8
#define MSG_TRUNC 0x10
#define MSG_CTRUNC 0x20
#define MSG_WAITALL 0x40
#define MSG_DONTWAIT 0x80
#define MSG_BCAST 0x100
#define MSG_MCAST 0x200
#define MSG_NOSIGNAL 0x400
#define MSG_CMSG_CLOEXEC 0x800
#define MSG_WAITFORONE 0x1000
#define MSG_CMSG_CLOFORK 0x2000
struct cmsghdr {
socklen_t cmsg_len;
int cmsg_level;
int cmsg_type;
};
#define CMSG_DATA(cmsg) \
((unsigned char *)(cmsg) + _ALIGN(sizeof(struct cmsghdr)))
#define CMSG_NXTHDR(mhdr, cmsg) \
(((char *)(cmsg) + _ALIGN((cmsg)->cmsg_len) + \
_ALIGN(sizeof(struct cmsghdr)) > \
((char *)(mhdr)->msg_control) + (mhdr)->msg_controllen) ? \
(struct cmsghdr *)NULL : \
(struct cmsghdr *)((char *)(cmsg) + _ALIGN((cmsg)->cmsg_len)))
#define CMSG_FIRSTHDR(mhdr) \
((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
(struct cmsghdr *)(mhdr)->msg_control : \
(struct cmsghdr *)NULL)
#ifdef _KERNEL
#define CMSG_ALIGN(n) _ALIGN(n)
#endif
#define CMSG_LEN(len) (_ALIGN(sizeof(struct cmsghdr)) + (len))
#define CMSG_SPACE(len) (_ALIGN(sizeof(struct cmsghdr)) + _ALIGN(len))
#define SCM_RIGHTS 0x01
#define SCM_TIMESTAMP 0x04
#ifndef _KERNEL
__BEGIN_DECLS
int accept(int, struct sockaddr *, socklen_t *);
int bind(int, const struct sockaddr *, socklen_t);
int connect(int, const struct sockaddr *, socklen_t);
int getpeername(int, struct sockaddr *, socklen_t *);
int getsockname(int, struct sockaddr *, socklen_t *);
int getsockopt(int, int, int, void *, socklen_t *);
int listen(int, int);
ssize_t recv(int, void *, size_t, int);
ssize_t recvfrom(int, void *, size_t, int, struct sockaddr *, socklen_t *);
ssize_t recvmsg(int, struct msghdr *, int);
int recvmmsg(int, struct mmsghdr *, unsigned int, int, struct timespec *);
ssize_t send(int, const void *, size_t, int);
ssize_t sendto(int, const void *,
size_t, int, const struct sockaddr *, socklen_t);
ssize_t sendmsg(int, const struct msghdr *, int);
int sendmmsg(int, struct mmsghdr *, unsigned int, int);
int setsockopt(int, int, int, const void *, socklen_t);
int shutdown(int, int);
int sockatmark(int);
int socket(int, int, int);
int socketpair(int, int, int, int *);
#if __POSIX_VISIBLE >= 202405 || __BSD_VISIBLE
int accept4(int, struct sockaddr *__restrict, socklen_t *__restrict, int);
#endif
#if __BSD_VISIBLE
int getpeereid(int, uid_t *, gid_t *);
int getrtable(void);
int setrtable(int);
#endif
__END_DECLS
#else
static inline struct sockaddr *
sstosa(struct sockaddr_storage *ss)
{
return ((struct sockaddr *)(ss));
}
#endif
#endif