From ee1a7fabb4e0abd3e73e828ce326dcb5fd38b874 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 8 Dec 2009 20:10:46 -0800 Subject: [PATCH] Add recvmmsg interface. --- ChangeLog | 7 +++++++ NEWS | 7 ++++++- sysdeps/unix/sysv/linux/Versions | 2 ++ sysdeps/unix/sysv/linux/bits/socket.h | 27 +++++++++++++++++++++++++-- sysdeps/unix/sysv/linux/syscalls.list | 1 + 5 files changed, 41 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 1f4d2b2723..59e4b19241 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-12-08 Ulrich Drepper + + * sysdeps/unix/sysv/linux/bits/socket.h: Define mmsghdr and declare + recvmmsg. + * sysdeps/unix/sysv/linux/syscalls.list: Add entry for recvmmsg. + * sysdeps/unix/sysv/linux/Versions: Add recvmmsg for GLIBC_2.12. + 2009-12-04 Andreas Krebbel * sysdeps/s390/s390-64/dl-trampoline.S: Add CFI for the call saved diff --git a/NEWS b/NEWS index db51d5fe94..e1fb6a5766 100644 --- a/NEWS +++ b/NEWS @@ -1,10 +1,15 @@ -GNU C Library NEWS -- history of user-visible changes. 2009-10-30 +GNU C Library NEWS -- history of user-visible changes. 2009-12-8 Copyright (C) 1992-2008, 2009 Free Software Foundation, Inc. See the end for copying conditions. Please send GNU C library bug reports via using `glibc' in the "product" field. +Version 2.12 + +* New Linux interface: recvmmsg + + Version 2.11 * New interfaces: execvpe, pthread_sigqueue, mkstemps, mkstemps64, mkostemps, diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions index 50c70513ff..f09ef6d983 100644 --- a/sysdeps/unix/sysv/linux/Versions +++ b/sysdeps/unix/sysv/linux/Versions @@ -146,6 +146,8 @@ libc { _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; ntp_gettimex; + + recvmmsg; } GLIBC_PRIVATE { # functions used in other libraries diff --git a/sysdeps/unix/sysv/linux/bits/socket.h b/sysdeps/unix/sysv/linux/bits/socket.h index f23b338a35..aa78087a72 100644 --- a/sysdeps/unix/sysv/linux/bits/socket.h +++ b/sysdeps/unix/sysv/linux/bits/socket.h @@ -234,8 +234,8 @@ enum #define MSG_MORE MSG_MORE MSG_CMSG_CLOEXEC = 0x40000000 /* Set close_on_exit for file - descriptor received through - SCM_RIGHTS. */ + descriptor received through + SCM_RIGHTS. */ #define MSG_CMSG_CLOEXEC MSG_CMSG_CLOEXEC }; @@ -259,6 +259,15 @@ struct msghdr int msg_flags; /* Flags on received message. */ }; +#ifdef __USE_GNU +/* For `recvmmsg'. */ +struct mmsghdr + { + struct msghdr msg_hdr; /* Actual message header. */ + unsigned int msg_len; /* Number of received bytes for the entry. */ + }; +#endif + /* Structure used for storage of ancillary data object information. */ struct cmsghdr { @@ -403,4 +412,18 @@ struct linger int l_linger; /* Time to linger. */ }; + +__BEGIN_DECLS + +/* Receive a message as described by MESSAGE from socket FD. + Returns the number of bytes read or -1 for errors. + + This function is a cancellation point and therefore not marked with + __THROW. */ +extern int recvmmsg (int __fd, struct mmsghdr *__vmessages, + unsigned int __vlen, int __flags, + __const struct timespec *__tmo); + +__END_DECLS + #endif /* bits/socket.h */ diff --git a/sysdeps/unix/sysv/linux/syscalls.list b/sysdeps/unix/sysv/linux/syscalls.list index a87906a4e3..a1a449eb4b 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list +++ b/sysdeps/unix/sysv/linux/syscalls.list @@ -53,6 +53,7 @@ prctl EXTRA prctl i:iiiii __prctl prctl putpmsg - putpmsg i:ippii putpmsg query_module EXTRA query_module i:sipip query_module quotactl EXTRA quotactl i:isip quotactl +recvmmsg EXTRA recvmmsg Ci:ipiip recvmmsg remap_file_pages - remap_file_pages i:piiii __remap_file_pages remap_file_pages sched_getp - sched_getparam i:ip __sched_getparam sched_getparam sched_gets - sched_getscheduler i:i __sched_getscheduler sched_getscheduler -- 2.11.4.GIT