]> granicus.if.org Git - strace/blob - tests/libmmsg.c
Consistently define __NR_* constants
[strace] / tests / libmmsg.c
1 /*
2  * Wrappers for recvmmsg and sendmmsg syscalls.
3  *
4  * Copyright (c) 2016-2018 Dmitry V. Levin <ldv@altlinux.org>
5  * All rights reserved.
6  *
7  * SPDX-License-Identifier: GPL-2.0-or-later
8  */
9
10 #include "tests.h"
11 #include <errno.h>
12 #include "scno.h"
13
14 #ifndef __NR_recvmmsg
15 # define __NR_recvmmsg -1
16 #endif
17 #define SC_recvmmsg 19
18
19 #ifndef __NR_sendmmsg
20 # define __NR_sendmmsg -1
21 #endif
22 #define SC_sendmmsg 20
23
24 int
25 recv_mmsg(const int fd, struct mmsghdr *const vec,
26           const unsigned int vlen, const unsigned int flags,
27           struct timespec *const timeout)
28 {
29         int rc = socketcall(__NR_recvmmsg, SC_recvmmsg,
30                             fd, (long) vec, vlen, flags, (long) timeout);
31
32         if (rc < 0 && ENOSYS == errno)
33                 perror_msg_and_skip("recvmmsg");
34
35         return rc;
36 }
37
38 int
39 send_mmsg(const int fd, struct mmsghdr *const vec,
40           const unsigned int vlen, const unsigned int flags)
41 {
42         int rc = socketcall(__NR_sendmmsg, SC_sendmmsg,
43                             fd, (long) vec, vlen, flags, 0);
44
45         if (rc < 0 && ENOSYS == errno)
46                 perror_msg_and_skip("sendmmsg");
47
48         return rc;
49 }