| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 | #define __FORCE_GLIBC__#include <features.h>#include <errno.h>#include <syscall.h>#include <sys/socket.h>#include <sys/socketcall.h>extern int socketcall(int call, unsigned long *args);#ifdef L_acceptint accept(int s, struct sockaddr *addr, socklen_t * addrlen){	unsigned long args[3];	args[0] = s;	args[1] = (unsigned long) addr;	args[2] = (unsigned long) addrlen;	return socketcall(SYS_ACCEPT, args);}#endif#ifdef L_bindint bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen){	unsigned long args[3];	args[0] = sockfd;	args[1] = (unsigned long) myaddr;	args[2] = addrlen;	return socketcall(SYS_BIND, args);}#endif#ifdef L_connectint connect(int sockfd, const struct sockaddr *saddr, socklen_t addrlen){	unsigned long args[3];	args[0] = sockfd;	args[1] = (unsigned long) saddr;	args[2] = addrlen;	return socketcall(SYS_CONNECT, args);}#endif#ifdef L_getpeernameint getpeername(int sockfd, struct sockaddr *addr, socklen_t * paddrlen){	unsigned long args[3];	args[0] = sockfd;	args[1] = (unsigned long) addr;	args[2] = (unsigned long) paddrlen;	return socketcall(SYS_GETPEERNAME, args);}#endif#ifdef L_getsocknameint getsockname(int sockfd, struct sockaddr *addr, socklen_t * paddrlen){	unsigned long args[3];	args[0] = sockfd;	args[1] = (unsigned long) addr;	args[2] = (unsigned long) paddrlen;	return socketcall(SYS_GETSOCKNAME, args);}#endif#ifdef L_getsockoptint getsockopt(int fd, int level, int optname, __ptr_t optval,		   socklen_t * optlen){	unsigned long args[5];	args[0] = fd;	args[1] = level;	args[2] = optname;	args[3] = (unsigned long) optval;	args[4] = (unsigned long) optlen;	return (socketcall(SYS_GETSOCKOPT, args));}#endif#ifdef L_listenint listen(int sockfd, unsigned int backlog){	unsigned long args[2];	args[0] = sockfd;	args[1] = backlog;	return socketcall(SYS_LISTEN, args);}#endif#ifdef L_recv/* recv, recvfrom added by bir7@leland.stanford.edu */int recv(int sockfd, __ptr_t buffer, size_t len, int flags){	unsigned long args[4];	args[0] = sockfd;	args[1] = (unsigned long) buffer;	args[2] = len;	args[3] = flags;	return (socketcall(SYS_RECV, args));}#endif#ifdef L_recvfrom/* recv, recvfrom added by bir7@leland.stanford.edu */int recvfrom(int sockfd, __ptr_t buffer, size_t len, int flags,		 struct sockaddr *to, socklen_t * tolen){	unsigned long args[6];	args[0] = sockfd;	args[1] = (unsigned long) buffer;	args[2] = len;	args[3] = flags;	args[4] = (unsigned long) to;	args[5] = (unsigned long) tolen;	return (socketcall(SYS_RECVFROM, args));}#endif#ifdef L_recvmsgint recvmsg(int sockfd, struct msghdr *msg, int flags){	unsigned long args[3];	args[0] = sockfd;	args[1] = (unsigned long) msg;	args[2] = flags;	return (socketcall(SYS_RECVMSG, args));}#endif#ifdef L_send/* send, sendto added by bir7@leland.stanford.edu */int send(int sockfd, const void *buffer, size_t len, int flags){	unsigned long args[4];	args[0] = sockfd;	args[1] = (unsigned long) buffer;	args[2] = len;	args[3] = flags;	return (socketcall(SYS_SEND, args));}#endif#ifdef L_sendmsgint sendmsg(int sockfd, const struct msghdr *msg, int flags){	unsigned long args[3];	args[0] = sockfd;	args[1] = (unsigned long) msg;	args[2] = flags;	return (socketcall(SYS_SENDMSG, args));}#endif#ifdef L_sendto/* send, sendto added by bir7@leland.stanford.edu */int sendto(int sockfd, const void *buffer, size_t len, int flags,	   const struct sockaddr *to, socklen_t tolen){	unsigned long args[6];	args[0] = sockfd;	args[1] = (unsigned long) buffer;	args[2] = len;	args[3] = flags;	args[4] = (unsigned long) to;	args[5] = tolen;	return (socketcall(SYS_SENDTO, args));}#endif#ifdef L_setsockopt/* [sg]etsockoptions by bir7@leland.stanford.edu */int setsockopt(int fd, int level, int optname, const void *optval,		   socklen_t optlen){	unsigned long args[5];	args[0] = fd;	args[1] = level;	args[2] = optname;	args[3] = (unsigned long) optval;	args[4] = optlen;	return (socketcall(SYS_SETSOCKOPT, args));}#endif#ifdef L_shutdown/* shutdown by bir7@leland.stanford.edu */int shutdown(int sockfd, int how){	unsigned long args[2];	args[0] = sockfd;	args[1] = how;	return (socketcall(SYS_SHUTDOWN, args));}#endif#ifdef L_socketint socket(int family, int type, int protocol){	unsigned long args[3];	args[0] = family;	args[1] = type;	args[2] = (unsigned long) protocol;	return socketcall(SYS_SOCKET, args);}#endif#ifdef L_socketpairint socketpair(int family, int type, int protocol, int sockvec[2]){	unsigned long args[4];	args[0] = family;	args[1] = type;	args[2] = protocol;	args[3] = (unsigned long) sockvec;	return socketcall(SYS_SOCKETPAIR, args);}#endif
 |