diff options
Diffstat (limited to 'libc/inet/socketcalls.c')
-rw-r--r-- | libc/inet/socketcalls.c | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/libc/inet/socketcalls.c b/libc/inet/socketcalls.c index 1fef8100b..cb281407e 100644 --- a/libc/inet/socketcalls.c +++ b/libc/inet/socketcalls.c @@ -29,6 +29,8 @@ #define SYS_SENDMSG 16 #define SYS_RECVMSG 17 #define SYS_ACCEPT4 18 +#define SYS_RECVMMSG 19 +#define SYS_SENDMMSG 20 #endif /* exposed on x86 since Linux commit 9dea5dc921b5f4045a18c63eb92e84dc274d17eb */ @@ -283,6 +285,30 @@ CANCELLABLE_SYSCALL(ssize_t, recvmsg, (int sockfd, struct msghdr *msg, int flags lt_libc_hidden(recvmsg) #endif +#ifdef L_recvmmsg +static ssize_t __NC(recvmmsg)(int sockfd, struct mmsghdr *msg, size_t vlen, + int flags, struct timespec *tmo) +{ +# ifdef __NR_recvmmsg + return (ssize_t)INLINE_SYSCALL(recvmmsg, 5, sockfd, msg, vlen, flags, tmo); +# else + unsigned long args[5]; + + args[0] = sockfd; + args[1] = (unsigned long) msg; + args[2] = vlen; + args[3] = flags; + args[4] = (unsigned long) tmo; + return (ssize_t)__socketcall(SYS_RECVMMSG, args); +# endif +} +CANCELLABLE_SYSCALL(ssize_t, recvmmsg, + (int sockfd, struct mmsghdr *msg, size_t vlen, int flags, + struct timespec *tmo), + (sockfd, msg, vlen, flags, tmo)) +lt_libc_hidden(recvmmsg) +#endif + #ifdef L_send static ssize_t __NC(send)(int sockfd, const void *buffer, size_t len, int flags) { @@ -324,6 +350,28 @@ CANCELLABLE_SYSCALL(ssize_t, sendmsg, (int sockfd, const struct msghdr *msg, int lt_libc_hidden(sendmsg) #endif +#ifdef L_sendmmsg +static ssize_t __NC(sendmmsg)(int sockfd, struct mmsghdr *msg, size_t vlen, + int flags) +{ +# ifdef __NR_sendmmsg + return (ssize_t)INLINE_SYSCALL(sendmmsg, 4, sockfd, msg, vlen, flags); +# else + unsigned long args[4]; + + args[0] = sockfd; + args[1] = (unsigned long) msg; + args[2] = vlen; + args[3] = flags; + return (ssize_t)__socketcall(SYS_SENDMMSG, args); +# endif +} +CANCELLABLE_SYSCALL(ssize_t, sendmmsg, + (int sockfd, struct mmsghdr *msg, size_t vlen, int flags), + (sockfd, msg, vlen, flags)) +lt_libc_hidden(sendmmsg) +#endif + #ifdef L_sendto ssize_t __NC(sendto)(int sockfd, const void *buffer, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) |