diff --git a/libc/unistd/socketcalls.c b/libc/unistd/socketcalls.c
new file mode 100644
index 0000000..d97abc2
--- /dev/null
+++ b/libc/unistd/socketcalls.c
@@ -0,0 +1,259 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in
+ *    the documentation and/or other materials provided with the
+ *    distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <unistd.h>
+#include <sys/socket.h>
+#include <sys/linux-syscalls.h>
+
+enum
+{
+    SYS_SOCKET = 1,
+    SYS_BIND,
+    SYS_CONNECT,
+    SYS_LISTEN,
+    SYS_ACCEPT,
+    SYS_GETSOCKNAME,
+    SYS_GETPEERNAME,
+    SYS_SOCKETPAIR,
+    SYS_SEND,
+    SYS_RECV,
+    SYS_SENDTO,
+    SYS_RECVFROM,
+    SYS_SHUTDOWN,
+    SYS_SETSOCKOPT,
+    SYS_GETSOCKOPT,
+    SYS_SENDMSG,
+    SYS_RECVMSG
+};
+
+#ifndef __NR_socket
+int socket(int domain, int type, int protocol)
+{
+    unsigned long  t[3];
+
+    t[0] = (unsigned long) domain;
+    t[1] = (unsigned long) type;
+    t[2] = (unsigned long) protocol;
+
+    return (int) __socketcall( SYS_SOCKET, t );
+}
+#endif /* !__NR_socket */
+
+
+#ifndef __NR_bind
+int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen)
+{
+    unsigned long  t[3];
+
+    t[0] = (unsigned long) sockfd;
+    t[1] = (unsigned long) my_addr;
+    t[2] = (unsigned long) addrlen;
+
+    return (int) __socketcall( SYS_BIND, t );
+}
+#endif  /* !__NR_bind */
+
+#ifndef __NR_connect
+int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t  addrlen )
+{
+    unsigned long  t[3];
+
+    t[0] = (unsigned long) sockfd;
+    t[1] = (unsigned long) serv_addr;
+    t[2] = (unsigned long) addrlen;
+
+    return (int) __socketcall( SYS_CONNECT, t );
+}
+#endif /* !__NR_connect */
+
+#ifndef __NR_listen
+int listen(int s, int backlog)
+{
+    unsigned long  t[2];
+
+    t[0] = (unsigned long) s;
+    t[1] = (unsigned long) backlog;
+
+    return (int) __socketcall( SYS_LISTEN, t );
+}
+#endif /* __NR_listen */
+
+#ifndef __NR_accept
+int accept(int sock, struct sockaddr *adresse, socklen_t *longueur)
+{
+    unsigned long  t[3];
+
+    t[0] = (unsigned long) sock;
+    t[1] = (unsigned long) adresse;
+    t[2] = (unsigned long) longueur;
+
+    return (int) __socketcall( SYS_ACCEPT, t );
+}
+#endif /* __NR_accept */
+
+#ifndef __NR_getsockname
+int getsockname(int s, struct sockaddr * name, socklen_t * namelen )
+{
+    unsigned long  t[3];
+
+    t[0] = (unsigned long) s;
+    t[1] = (unsigned long) name;
+    t[2] = (unsigned long) namelen;
+
+    return (int) __socketcall( SYS_GETSOCKNAME, t );
+}
+#endif /* __NR_getsockname */
+
+#ifndef __NR_getpeername
+int getpeername(int s, struct sockaddr *name, socklen_t *namelen)
+{
+    unsigned long  t[3];
+
+    t[0] = (unsigned long) s;
+    t[1] = (unsigned long) name;
+    t[2] = (unsigned long) namelen;
+
+    return (int) __socketcall( SYS_GETPEERNAME, t );
+}
+#endif /* !__NR_getpeername */
+
+#ifndef __NR_socketpair
+int socketpair(int d, int type, int protocol, int sv[2])
+{
+    unsigned long  t[4];
+
+    t[0] = (unsigned long) d;
+    t[1] = (unsigned long) type;
+    t[2] = (unsigned long) protocol;
+    t[3] = (unsigned long) sv;
+
+    return (int) __socketcall( SYS_SOCKETPAIR, t );
+}
+#endif /* __NR_socketpair */
+
+#ifndef __NR_sendto
+ssize_t sendto(int socket, const void *message, size_t length, int flags,
+      const struct sockaddr *dest_addr, socklen_t dest_len)
+{
+    unsigned long  t[6];
+
+    t[0] = (unsigned long) socket;
+    t[1] = (unsigned long) message;
+    t[2] = (unsigned long) length;
+    t[3] = (unsigned long) flags;
+    t[4] = (unsigned long) dest_addr;
+    t[5] = (unsigned long) dest_len;
+
+   return __socketcall( SYS_SENDTO, t );
+}
+#endif /* !__NR_sendto */
+
+#ifndef __NR_recvfrom
+ssize_t recvfrom(int socket, void *buffer, size_t length, unsigned int flags,
+             const struct sockaddr *address, socklen_t *address_len)
+{
+    unsigned long  t[6];
+
+    t[0] = (unsigned long) socket;
+    t[1] = (unsigned long) buffer;
+    t[2] = (unsigned long) length;
+    t[3] = (unsigned long) flags;
+    t[4] = (unsigned long) address;
+    t[5] = (unsigned long) address_len;
+
+   return __socketcall( SYS_RECVFROM, t );
+}
+#endif /* !__NR_recvfrom */
+
+#ifndef __NR_shutdown
+int shutdown(int socket, int how)
+{
+    unsigned long  t[2];
+
+    t[0] = (unsigned long) socket;
+    t[1] = (unsigned long) how;
+
+   return (int) __socketcall( SYS_SHUTDOWN, t );
+}
+#endif /* !__NR_shutdown */
+
+#ifndef __NR_setsockopt
+int  setsockopt( int  s, int  level, int  optname, const void*  optval, socklen_t  optlen )
+{
+    unsigned long  t[5];
+
+    t[0] = (unsigned long) s;
+    t[1] = (unsigned long) level;
+    t[2] = (unsigned long) optname;
+    t[3] = (unsigned long) optval;
+    t[4] = (unsigned long) optlen;
+
+   return (int) __socketcall( SYS_SETSOCKOPT, t );
+}
+#endif /* !__NR_setsockopt */
+
+#ifndef __NR_getsockopt
+int getsockopt(int s, int level, int optname, void *optval, socklen_t *optlen)
+{
+    unsigned long  t[5];
+
+    t[0] = (unsigned long) s;
+    t[1] = (unsigned long) level;
+    t[2] = (unsigned long) optname;
+    t[3] = (unsigned long) optval;
+    t[4] = (unsigned long) optlen;
+
+    return (int) __socketcall( SYS_GETSOCKOPT, t );
+}
+#endif /* !__NR_getsockopt */
+
+#ifndef __NR_sendmsg
+ssize_t sendmsg (int socket, const struct msghdr *message, unsigned int flags)
+{
+    unsigned long  t[3];
+
+    t[0] = (unsigned long) socket;
+    t[1] = (unsigned long) message;
+    t[2] = (unsigned long) flags;
+
+   return __socketcall( SYS_SENDMSG, t );
+}
+#endif /* __NR_sendmsg */
+
+#ifndef __NR_recvmsg
+ssize_t recvmsg(int socket, struct msghdr *message, unsigned int flags)
+{
+    unsigned long  t[3];
+
+    t[0] = (unsigned long) socket;
+    t[1] = (unsigned long) message;
+    t[2] = (unsigned long) flags;
+
+   return __socketcall( SYS_RECVMSG, t );
+}
+#endif /* __NR_recvmsg */
+
