1a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project/* 2a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * All rights reserved. 4a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * 5a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * Redistribution and use in source and binary forms, with or without 6a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * modification, are permitted provided that the following conditions 7a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * are met: 8a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * * Redistributions of source code must retain the above copyright 9a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * notice, this list of conditions and the following disclaimer. 10a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * * Redistributions in binary form must reproduce the above copyright 11a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * notice, this list of conditions and the following disclaimer in 12a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * the documentation and/or other materials provided with the 13a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * distribution. 14a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * 15a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project * SUCH DAMAGE. 27a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project */ 28a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#include <unistd.h> 29a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#include <sys/socket.h> 30a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#include <sys/linux-syscalls.h> 31a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 32a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectenum 33a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 34a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_SOCKET = 1, 35a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_BIND, 36a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_CONNECT, 37a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_LISTEN, 38a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_ACCEPT, 39a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_GETSOCKNAME, 40a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_GETPEERNAME, 41a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_SOCKETPAIR, 42a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_SEND, 43a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_RECV, 44a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_SENDTO, 45a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_RECVFROM, 46a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_SHUTDOWN, 47a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_SETSOCKOPT, 48a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_GETSOCKOPT, 49a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_SENDMSG, 50a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project SYS_RECVMSG 51a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project}; 52a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 53a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_socket 54a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint socket(int domain, int type, int protocol) 55a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 56a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[3]; 57a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 58a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) domain; 59a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) type; 60a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) protocol; 61a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 62a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_SOCKET, t ); 63a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 64a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_socket */ 65a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 66a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 67a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_bind 68a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen) 69a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 70a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[3]; 71a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 72a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) sockfd; 73a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) my_addr; 74a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) addrlen; 75a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 76a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_BIND, t ); 77a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 78a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_bind */ 79a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 80a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_connect 81a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen ) 82a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 83a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[3]; 84a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 85a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) sockfd; 86a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) serv_addr; 87a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) addrlen; 88a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 89a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_CONNECT, t ); 90a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 91a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_connect */ 92a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 93a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_listen 94a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint listen(int s, int backlog) 95a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 96a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[2]; 97a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 98a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) s; 99a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) backlog; 100a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 101a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_LISTEN, t ); 102a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 103a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* __NR_listen */ 104a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 105a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_accept 106a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint accept(int sock, struct sockaddr *adresse, socklen_t *longueur) 107a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 108a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[3]; 109a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 110a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) sock; 111a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) adresse; 112a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) longueur; 113a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 114a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_ACCEPT, t ); 115a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 116a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* __NR_accept */ 117a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 118a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_getsockname 119a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint getsockname(int s, struct sockaddr * name, socklen_t * namelen ) 120a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 121a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[3]; 122a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 123a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) s; 124a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) name; 125a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) namelen; 126a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 127a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_GETSOCKNAME, t ); 128a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 129a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* __NR_getsockname */ 130a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 131a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_getpeername 132a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint getpeername(int s, struct sockaddr *name, socklen_t *namelen) 133a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 134a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[3]; 135a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 136a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) s; 137a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) name; 138a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) namelen; 139a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 140a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_GETPEERNAME, t ); 141a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 142a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_getpeername */ 143a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 144a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_socketpair 145a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint socketpair(int d, int type, int protocol, int sv[2]) 146a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 147a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[4]; 148a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 149a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) d; 150a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) type; 151a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) protocol; 152a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[3] = (unsigned long) sv; 153a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 154a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_SOCKETPAIR, t ); 155a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 156a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* __NR_socketpair */ 157a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 158a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_sendto 159a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectssize_t sendto(int socket, const void *message, size_t length, int flags, 160a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project const struct sockaddr *dest_addr, socklen_t dest_len) 161a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 162a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[6]; 163a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 164a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) socket; 165a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) message; 166a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) length; 167a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[3] = (unsigned long) flags; 168a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[4] = (unsigned long) dest_addr; 169a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[5] = (unsigned long) dest_len; 170a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 171a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return __socketcall( SYS_SENDTO, t ); 172a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 173a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_sendto */ 174a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 175a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_recvfrom 176a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectssize_t recvfrom(int socket, void *buffer, size_t length, unsigned int flags, 177a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project const struct sockaddr *address, socklen_t *address_len) 178a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 179a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[6]; 180a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 181a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) socket; 182a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) buffer; 183a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) length; 184a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[3] = (unsigned long) flags; 185a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[4] = (unsigned long) address; 186a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[5] = (unsigned long) address_len; 187a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 188a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return __socketcall( SYS_RECVFROM, t ); 189a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 190a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_recvfrom */ 191a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 192a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_shutdown 193a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint shutdown(int socket, int how) 194a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 195a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[2]; 196a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 197a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) socket; 198a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) how; 199a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 200a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_SHUTDOWN, t ); 201a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 202a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_shutdown */ 203a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 204a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_setsockopt 205a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint setsockopt( int s, int level, int optname, const void* optval, socklen_t optlen ) 206a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 207a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[5]; 208a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 209a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) s; 210a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) level; 211a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) optname; 212a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[3] = (unsigned long) optval; 213a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[4] = (unsigned long) optlen; 214a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 215a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_SETSOCKOPT, t ); 216a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 217a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_setsockopt */ 218a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 219a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_getsockopt 220a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Projectint getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen) 221a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 222a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[5]; 223a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 224a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) s; 225a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) level; 226a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) optname; 227a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[3] = (unsigned long) optval; 228a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[4] = (unsigned long) optlen; 229a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 230a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return (int) __socketcall( SYS_GETSOCKOPT, t ); 231a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 232a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* !__NR_getsockopt */ 233a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 234a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_sendmsg 235336efb5267e465ac52d78327d37f79553b3f0584Tony Simint sendmsg (int socket, const struct msghdr *message, unsigned int flags) 236a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 237a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[3]; 238a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 239a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) socket; 240a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) message; 241a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) flags; 242a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 243a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return __socketcall( SYS_SENDMSG, t ); 244a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 245a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* __NR_sendmsg */ 246a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 247a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#ifndef __NR_recvmsg 248336efb5267e465ac52d78327d37f79553b3f0584Tony Simint recvmsg(int socket, struct msghdr *message, unsigned int flags) 249a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project{ 250a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project unsigned long t[3]; 251a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 252a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[0] = (unsigned long) socket; 253a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[1] = (unsigned long) message; 254a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project t[2] = (unsigned long) flags; 255a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 256a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project return __socketcall( SYS_RECVMSG, t ); 257a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project} 258a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project#endif /* __NR_recvmsg */ 259a27d2baa0c1a2ec70f47ea9199b1dd6762c8a34The Android Open Source Project 260