1/* 2 * Copyright (C) 2008 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29#ifndef _SYS_SOCKET_H_ 30#define _SYS_SOCKET_H_ 31 32#include <sys/cdefs.h> 33#include <sys/types.h> 34#include <linux/socket.h> 35 36#include <asm/fcntl.h> 37#include <asm/socket.h> 38#include <linux/sockios.h> 39#include <linux/uio.h> 40#include <linux/types.h> 41#include <linux/compiler.h> 42 43#include <bits/sa_family_t.h> 44 45__BEGIN_DECLS 46 47struct timespec; 48 49#ifdef __mips__ 50#define SOCK_DGRAM 1 51#define SOCK_STREAM 2 52#else 53#define SOCK_STREAM 1 54#define SOCK_DGRAM 2 55#endif 56#define SOCK_RAW 3 57#define SOCK_RDM 4 58#define SOCK_SEQPACKET 5 59#define SOCK_DCCP 6 60#define SOCK_PACKET 10 61 62#define SOCK_CLOEXEC O_CLOEXEC 63#define SOCK_NONBLOCK O_NONBLOCK 64 65enum { 66 SHUT_RD = 0, 67#define SHUT_RD SHUT_RD 68 SHUT_WR, 69#define SHUT_WR SHUT_WR 70 SHUT_RDWR 71#define SHUT_RDWR SHUT_RDWR 72}; 73 74struct sockaddr { 75 sa_family_t sa_family; 76 char sa_data[14]; 77}; 78 79struct linger { 80 int l_onoff; 81 int l_linger; 82}; 83 84struct msghdr { 85 void* msg_name; 86 socklen_t msg_namelen; 87 struct iovec* msg_iov; 88 size_t msg_iovlen; 89 void* msg_control; 90 size_t msg_controllen; 91 int msg_flags; 92}; 93 94struct mmsghdr { 95 struct msghdr msg_hdr; 96 unsigned int msg_len; 97}; 98 99struct cmsghdr { 100 size_t cmsg_len; 101 int cmsg_level; 102 int cmsg_type; 103}; 104 105#define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr((mhdr), (cmsg)) 106#define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) 107#define CMSG_DATA(cmsg) (((unsigned char*)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) 108#define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) 109#define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) 110#define CMSG_FIRSTHDR(msg) \ 111 ((msg)->msg_controllen >= sizeof(struct cmsghdr) \ 112 ? (struct cmsghdr*) (msg)->msg_control : (struct cmsghdr*) NULL) 113#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && (cmsg)->cmsg_len <= (unsigned long) ((mhdr)->msg_controllen - ((char*)(cmsg) - (char*)(mhdr)->msg_control))) 114 115#if __ANDROID_API__ >= __ANDROID_API_L__ 116struct cmsghdr* __cmsg_nxthdr(struct msghdr* __msg, struct cmsghdr* __cmsg) __INTRODUCED_IN(21); 117#else 118/* TODO(danalbert): Move this into libandroid_support. */ 119static inline struct cmsghdr* __cmsg_nxthdr(struct msghdr* msg, struct cmsghdr* cmsg) { 120 struct cmsghdr* ptr = 121 __BIONIC_CAST(reinterpret_cast, struct cmsghdr*, 122 (__BIONIC_CAST(reinterpret_cast, char*, cmsg) + CMSG_ALIGN(cmsg->cmsg_len))); 123 size_t len = __BIONIC_CAST(reinterpret_cast, char*, ptr + 1) - 124 __BIONIC_CAST(reinterpret_cast, char*, msg->msg_control); 125 if (len > msg->msg_controllen) { 126 return NULL; 127 } 128 return ptr; 129} 130#endif /* __ANDROID_API__ >= __ANDROID_API_L__ */ 131 132#define SCM_RIGHTS 0x01 133#define SCM_CREDENTIALS 0x02 134#define SCM_SECURITY 0x03 135 136struct ucred { 137 pid_t pid; 138 uid_t uid; 139 gid_t gid; 140}; 141 142#define AF_UNSPEC 0 143#define AF_UNIX 1 144#define AF_LOCAL 1 145#define AF_INET 2 146#define AF_AX25 3 147#define AF_IPX 4 148#define AF_APPLETALK 5 149#define AF_NETROM 6 150#define AF_BRIDGE 7 151#define AF_ATMPVC 8 152#define AF_X25 9 153#define AF_INET6 10 154#define AF_ROSE 11 155#define AF_DECnet 12 156#define AF_NETBEUI 13 157#define AF_SECURITY 14 158#define AF_KEY 15 159#define AF_NETLINK 16 160#define AF_ROUTE AF_NETLINK 161#define AF_PACKET 17 162#define AF_ASH 18 163#define AF_ECONET 19 164#define AF_ATMSVC 20 165#define AF_RDS 21 166#define AF_SNA 22 167#define AF_IRDA 23 168#define AF_PPPOX 24 169#define AF_WANPIPE 25 170#define AF_LLC 26 171#define AF_CAN 29 172#define AF_TIPC 30 173#define AF_BLUETOOTH 31 174#define AF_IUCV 32 175#define AF_RXRPC 33 176#define AF_ISDN 34 177#define AF_PHONET 35 178#define AF_IEEE802154 36 179#define AF_CAIF 37 180#define AF_ALG 38 181#define AF_NFC 39 182#define AF_VSOCK 40 183#define AF_KCM 41 184#define AF_QIPCRTR 42 185#define AF_MAX 43 186 187#define PF_UNSPEC AF_UNSPEC 188#define PF_UNIX AF_UNIX 189#define PF_LOCAL AF_LOCAL 190#define PF_INET AF_INET 191#define PF_AX25 AF_AX25 192#define PF_IPX AF_IPX 193#define PF_APPLETALK AF_APPLETALK 194#define PF_NETROM AF_NETROM 195#define PF_BRIDGE AF_BRIDGE 196#define PF_ATMPVC AF_ATMPVC 197#define PF_X25 AF_X25 198#define PF_INET6 AF_INET6 199#define PF_ROSE AF_ROSE 200#define PF_DECnet AF_DECnet 201#define PF_NETBEUI AF_NETBEUI 202#define PF_SECURITY AF_SECURITY 203#define PF_KEY AF_KEY 204#define PF_NETLINK AF_NETLINK 205#define PF_ROUTE AF_ROUTE 206#define PF_PACKET AF_PACKET 207#define PF_ASH AF_ASH 208#define PF_ECONET AF_ECONET 209#define PF_ATMSVC AF_ATMSVC 210#define PF_RDS AF_RDS 211#define PF_SNA AF_SNA 212#define PF_IRDA AF_IRDA 213#define PF_PPPOX AF_PPPOX 214#define PF_WANPIPE AF_WANPIPE 215#define PF_LLC AF_LLC 216#define PF_CAN AF_CAN 217#define PF_TIPC AF_TIPC 218#define PF_BLUETOOTH AF_BLUETOOTH 219#define PF_IUCV AF_IUCV 220#define PF_RXRPC AF_RXRPC 221#define PF_ISDN AF_ISDN 222#define PF_PHONET AF_PHONET 223#define PF_IEEE802154 AF_IEEE802154 224#define PF_CAIF AF_CAIF 225#define PF_ALG AF_ALG 226#define PF_NFC AF_NFC 227#define PF_VSOCK AF_VSOCK 228#define PF_KCM AF_KCM 229#define PF_QIPCRTR AF_QIPCRTR 230#define PF_MAX AF_MAX 231 232#define SOMAXCONN 128 233 234#define MSG_OOB 1 235#define MSG_PEEK 2 236#define MSG_DONTROUTE 4 237#define MSG_TRYHARD 4 238#define MSG_CTRUNC 8 239#define MSG_PROBE 0x10 240#define MSG_TRUNC 0x20 241#define MSG_DONTWAIT 0x40 242#define MSG_EOR 0x80 243#define MSG_WAITALL 0x100 244#define MSG_FIN 0x200 245#define MSG_SYN 0x400 246#define MSG_CONFIRM 0x800 247#define MSG_RST 0x1000 248#define MSG_ERRQUEUE 0x2000 249#define MSG_NOSIGNAL 0x4000 250#define MSG_MORE 0x8000 251#define MSG_WAITFORONE 0x10000 252#define MSG_BATCH 0x40000 253#define MSG_FASTOPEN 0x20000000 254#define MSG_CMSG_CLOEXEC 0x40000000 255#define MSG_EOF MSG_FIN 256#define MSG_CMSG_COMPAT 0 257 258#define SOL_IP 0 259#define SOL_TCP 6 260#define SOL_UDP 17 261#define SOL_IPV6 41 262#define SOL_ICMPV6 58 263#define SOL_SCTP 132 264#define SOL_RAW 255 265#define SOL_IPX 256 266#define SOL_AX25 257 267#define SOL_ATALK 258 268#define SOL_NETROM 259 269#define SOL_ROSE 260 270#define SOL_DECNET 261 271#define SOL_X25 262 272#define SOL_PACKET 263 273#define SOL_ATM 264 274#define SOL_AAL 265 275#define SOL_IRDA 266 276#define SOL_NETBEUI 267 277#define SOL_LLC 268 278#define SOL_DCCP 269 279#define SOL_NETLINK 270 280#define SOL_TIPC 271 281#define SOL_RXRPC 272 282#define SOL_PPPOL2TP 273 283#define SOL_BLUETOOTH 274 284#define SOL_PNPIPE 275 285#define SOL_RDS 276 286#define SOL_IUCV 277 287#define SOL_CAIF 278 288#define SOL_ALG 279 289#define SOL_NFC 280 290#define SOL_KCM 281 291 292#define IPX_TYPE 1 293 294#ifdef __i386__ 295# define __socketcall extern __attribute__((__cdecl__)) 296#else 297# define __socketcall extern 298#endif 299 300__socketcall int accept(int __fd, struct sockaddr* __addr, socklen_t* __addr_length); 301__socketcall int accept4(int __fd, struct sockaddr* __addr, socklen_t* __addr_length, int __flags) __INTRODUCED_IN(21); 302__socketcall int bind(int __fd, const struct sockaddr* __addr, socklen_t __addr_length); 303__socketcall int connect(int __fd, const struct sockaddr* __addr, socklen_t __addr_length); 304__socketcall int getpeername(int __fd, struct sockaddr* __addr, socklen_t* __addr_length); 305__socketcall int getsockname(int __fd, struct sockaddr* __addr, socklen_t* __addr_length); 306__socketcall int getsockopt(int __fd, int __level, int __option, void* __value, socklen_t* __value_length); 307__socketcall int listen(int __fd, int __backlog); 308__socketcall int recvmmsg(int __fd, struct mmsghdr* __msgs, unsigned int __msg_count, int __flags, const struct timespec* __timeout) 309 __INTRODUCED_IN(21); 310__socketcall ssize_t recvmsg(int __fd, struct msghdr* __msg, int __flags); 311__socketcall int sendmmsg(int __fd, const struct mmsghdr* __msgs, unsigned int __msg_count, int __flags) __INTRODUCED_IN(21); 312__socketcall ssize_t sendmsg(int __fd, const struct msghdr* __msg, int __flags); 313__socketcall int setsockopt(int __fd, int __level, int __option, const void* __value, socklen_t __value_length); 314__socketcall int shutdown(int __fd, int __how); 315__socketcall int socket(int __af, int __type, int __protocol); 316__socketcall int socketpair(int __af, int __type, int __protocol, int __fds[2]); 317 318ssize_t recv(int __fd, void* __buf, size_t __n, int __flags); 319ssize_t send(int __fd, const void* __buf, size_t __n, int __flags); 320 321__socketcall ssize_t sendto(int __fd, const void* __buf, size_t __n, int __flags, const struct sockaddr* __dst_addr, socklen_t __dst_addr_length); 322__socketcall ssize_t recvfrom(int __fd, void* __buf, size_t __n, int __flags, struct sockaddr* __src_addr, socklen_t* __src_addr_length); 323 324#if defined(__BIONIC_INCLUDE_FORTIFY_HEADERS) 325#include <bits/fortify/socket.h> 326#endif 327 328#undef __socketcall 329 330__END_DECLS 331 332#endif 333