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