5 #include <sys/socket.h>
8 extern int __socketcall(int call, unsigned long *args);
10 /* Various socketcall numbers */
16 #define SYS_GETSOCKNAME 6
17 #define SYS_GETPEERNAME 7
18 #define SYS_SOCKETPAIR 8
22 #define SYS_RECVFROM 12
23 #define SYS_SHUTDOWN 13
24 #define SYS_SETSOCKOPT 14
25 #define SYS_GETSOCKOPT 15
26 #define SYS_SENDMSG 16
27 #define SYS_RECVMSG 17
33 #define __NR___libc_accept __NR_accept
34 _syscall3(int, __libc_accept, int, call, struct sockaddr *, addr, socklen_t *,addrlen);
35 #elif defined(__NR_socketcall)
36 int __libc_accept(int s, struct sockaddr *addr, socklen_t * addrlen)
38 unsigned long args[3];
41 args[1] = (unsigned long) addr;
42 args[2] = (unsigned long) addrlen;
43 return __socketcall(SYS_ACCEPT, args);
46 weak_alias(__libc_accept, accept);
51 _syscall3(int, bind, int, sockfd, const struct sockaddr *, myaddr, socklen_t, addrlen);
52 #elif defined(__NR_socketcall)
53 int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen)
55 unsigned long args[3];
58 args[1] = (unsigned long) myaddr;
60 return __socketcall(SYS_BIND, args);
67 #define __NR___libc_connect __NR_connect
68 _syscall3(int, __libc_connect, int, sockfd, const struct sockaddr *, saddr, socklen_t, addrlen);
69 #elif defined(__NR_socketcall)
70 int __libc_connect(int sockfd, const struct sockaddr *saddr, socklen_t addrlen)
72 unsigned long args[3];
75 args[1] = (unsigned long) saddr;
77 return __socketcall(SYS_CONNECT, args);
80 weak_alias(__libc_connect, connect);
84 #ifdef __NR_getpeername
85 _syscall3(int, getpeername, int, sockfd, struct sockaddr *, addr, socklen_t *,paddrlen);
86 #elif defined(__NR_socketcall)
87 int getpeername(int sockfd, struct sockaddr *addr, socklen_t * paddrlen)
89 unsigned long args[3];
92 args[1] = (unsigned long) addr;
93 args[2] = (unsigned long) paddrlen;
94 return __socketcall(SYS_GETPEERNAME, args);
100 #ifdef __NR_getsockname
101 _syscall3(int, getsockname, int, sockfd, struct sockaddr *, addr, socklen_t *,paddrlen);
102 #elif defined(__NR_socketcall)
103 int getsockname(int sockfd, struct sockaddr *addr, socklen_t * paddrlen)
105 unsigned long args[3];
108 args[1] = (unsigned long) addr;
109 args[2] = (unsigned long) paddrlen;
110 return __socketcall(SYS_GETSOCKNAME, args);
116 #ifdef __NR_getsockopt
117 _syscall5(int, getsockopt, int, fd, int, level, int, optname, __ptr_t, optval, socklen_t *, optlen);
118 #elif defined(__NR_socketcall)
119 int getsockopt(int fd, int level, int optname, __ptr_t optval,
122 unsigned long args[5];
127 args[3] = (unsigned long) optval;
128 args[4] = (unsigned long) optlen;
129 return (__socketcall(SYS_GETSOCKOPT, args));
136 _syscall2(int, listen, int, sockfd, int, backlog);
137 #elif defined(__NR_socketcall)
138 int listen(int sockfd, int backlog)
140 unsigned long args[2];
144 return __socketcall(SYS_LISTEN, args);
151 #define __NR___libc_recv __NR_recv
152 _syscall4(ssize_t, __libc_recv, int, sockfd, __ptr_t, buffer, size_t, len, int, flags);
153 weak_alias(__libc_recv, recv);
154 #elif defined(__NR_socketcall)
155 /* recv, recvfrom added by bir7@leland.stanford.edu */
156 ssize_t __libc_recv(int sockfd, __ptr_t buffer, size_t len, int flags)
158 unsigned long args[4];
161 args[1] = (unsigned long) buffer;
164 return (__socketcall(SYS_RECV, args));
166 weak_alias(__libc_recv, recv);
167 #elif defined(__NR_recvfrom)
168 ssize_t __libc_recv(int sockfd, __ptr_t buffer, size_t len, int flags)
170 return (recvfrom(sockfd, buffer, len, flags, NULL, NULL));
172 weak_alias(__libc_recv, recv);
178 #define __NR___libc_recvfrom __NR_recvfrom
179 _syscall6(ssize_t, __libc_recvfrom, int, sockfd, __ptr_t, buffer, size_t, len, int, flags,
180 struct sockaddr *, to, socklen_t *, tolen);
181 #elif defined(__NR_socketcall)
182 /* recv, recvfrom added by bir7@leland.stanford.edu */
183 ssize_t __libc_recvfrom(int sockfd, __ptr_t buffer, size_t len, int flags,
184 struct sockaddr *to, socklen_t * tolen)
186 unsigned long args[6];
189 args[1] = (unsigned long) buffer;
192 args[4] = (unsigned long) to;
193 args[5] = (unsigned long) tolen;
194 return (__socketcall(SYS_RECVFROM, args));
197 weak_alias(__libc_recvfrom, recvfrom);
202 #define __NR___libc_recvmsg __NR_recvmsg
203 _syscall3(ssize_t, __libc_recvmsg, int, sockfd, struct msghdr *, msg, int, flags);
204 #elif defined(__NR_socketcall)
205 ssize_t __libc_recvmsg(int sockfd, struct msghdr *msg, int flags)
207 unsigned long args[3];
210 args[1] = (unsigned long) msg;
212 return (__socketcall(SYS_RECVMSG, args));
215 weak_alias(__libc_recvmsg, recvmsg);
220 #define __NR___libc_send __NR_send
221 _syscall4(ssize_t, __libc_send, int, sockfd, const void *, buffer, size_t, len, int, flags);
222 weak_alias(__libc_send, send);
223 #elif defined(__NR_socketcall)
224 /* send, sendto added by bir7@leland.stanford.edu */
225 ssize_t __libc_send(int sockfd, const void *buffer, size_t len, int flags)
227 unsigned long args[4];
230 args[1] = (unsigned long) buffer;
233 return (__socketcall(SYS_SEND, args));
235 weak_alias(__libc_send, send);
236 #elif defined(__NR_sendto)
237 ssize_t __libc_send(int sockfd, const void *buffer, size_t len, int flags)
239 return (sendto(sockfd, buffer, len, flags, NULL, 0));
241 weak_alias(__libc_send, send);
247 #define __NR___libc_sendmsg __NR_sendmsg
248 _syscall3(ssize_t, __libc_sendmsg, int, sockfd, const struct msghdr *, msg, int, flags);
249 #elif defined(__NR_socketcall)
250 ssize_t __libc_sendmsg(int sockfd, const struct msghdr *msg, int flags)
252 unsigned long args[3];
255 args[1] = (unsigned long) msg;
257 return (__socketcall(SYS_SENDMSG, args));
260 weak_alias(__libc_sendmsg, sendmsg);
265 #define __NR___libc_sendto __NR_sendto
266 _syscall6(ssize_t, __libc_sendto, int, sockfd, const void *, buffer, size_t, len,
267 int, flags, const struct sockaddr *, to, socklen_t, tolen);
268 #elif defined(__NR_socketcall)
269 /* send, sendto added by bir7@leland.stanford.edu */
270 ssize_t __libc_sendto(int sockfd, const void *buffer, size_t len, int flags,
271 const struct sockaddr *to, socklen_t tolen)
273 unsigned long args[6];
276 args[1] = (unsigned long) buffer;
279 args[4] = (unsigned long) to;
281 return (__socketcall(SYS_SENDTO, args));
284 weak_alias(__libc_sendto, sendto);
288 #ifdef __NR_setsockopt
289 _syscall5(int, setsockopt, int, fd, int, level, int, optname, const void *, optval, socklen_t, optlen);
290 #elif defined(__NR_socketcall)
291 /* [sg]etsockoptions by bir7@leland.stanford.edu */
292 int setsockopt(int fd, int level, int optname, const void *optval,
295 unsigned long args[5];
300 args[3] = (unsigned long) optval;
302 return (__socketcall(SYS_SETSOCKOPT, args));
309 _syscall2(int, shutdown, int, sockfd, int, how);
310 #elif defined(__NR_socketcall)
311 /* shutdown by bir7@leland.stanford.edu */
312 int shutdown(int sockfd, int how)
314 unsigned long args[2];
318 return (__socketcall(SYS_SHUTDOWN, args));
325 _syscall3(int, socket, int, family, int, type, int, protocol);
326 #elif defined(__NR_socketcall)
327 int socket(int family, int type, int protocol)
329 unsigned long args[3];
333 args[2] = (unsigned long) protocol;
334 return __socketcall(SYS_SOCKET, args);
340 #ifdef __NR_socketpair
341 _syscall4(int, socketpair, int, family, int, type, int, protocol, int *, sockvec);
342 #elif defined(__NR_socketcall)
343 int socketpair(int family, int type, int protocol, int sockvec[2])
345 unsigned long args[4];
350 args[3] = (unsigned long) sockvec;
351 return __socketcall(SYS_SOCKETPAIR, args);