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