sendmmsg_linux_64.go 584 B

1234567891011121314151617181920212223242526
  1. //go:build linux && (amd64 || arm64 || ppc64 || ppc64le || mips64 || mips64le || s390x || riscv64 || loong64) && !android && !e2e_testing
  2. package udp
  3. import (
  4. "unsafe"
  5. "golang.org/x/sys/unix"
  6. )
  7. type linuxMmsgHdr struct {
  8. Hdr unix.Msghdr
  9. Len uint32
  10. _ uint32
  11. }
  12. func sendmmsg(fd int, hdrs []linuxMmsgHdr, flags int) (int, error) {
  13. if len(hdrs) == 0 {
  14. return 0, nil
  15. }
  16. n, _, errno := unix.Syscall6(unix.SYS_SENDMMSG, uintptr(fd), uintptr(unsafe.Pointer(&hdrs[0])), uintptr(len(hdrs)), uintptr(flags), 0, 0)
  17. if errno != 0 {
  18. return int(n), errno
  19. }
  20. return int(n), nil
  21. }