From 0b940a756838efcb90363ad99cb085d077b78e96 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 18 Apr 2018 07:54:39 +0200 Subject: Use socketcall on x86 --- syscall_linux_386.go | 53 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 syscall_linux_386.go (limited to 'syscall_linux_386.go') diff --git a/syscall_linux_386.go b/syscall_linux_386.go new file mode 100644 index 0000000..76d7c7e --- /dev/null +++ b/syscall_linux_386.go @@ -0,0 +1,53 @@ +// +build linux,386 + +/* Copyright 2018 Jason A. Donenfeld . All Rights Reserved. + */ + +package main + +import ( + "golang.org/x/sys/unix" + "syscall" + "unsafe" +) + +const ( + _SENDMSG = 16 + _RECVMSG = 17 +) + +func sendmsg(fd int, msghdr *unix.Msghdr, flags int) (uintptr, uintptr, syscall.Errno) { + args := struct { + fd uintptr + msghdr uintptr + flags uintptr + }{ + uintptr(fd), + uintptr(unsafe.Pointer(msghdr)), + uintptr(flags), + } + return unix.Syscall( + unix.SYS_SOCKETCALL, + _SENDMSG, + uintptr(unsafe.Pointer(&args)), + 0, + ) +} + +func recvmsg(fd int, msghdr *unix.Msghdr, flags int) (uintptr, uintptr, syscall.Errno) { + args := struct { + fd uintptr + msghdr uintptr + flags uintptr + }{ + uintptr(fd), + uintptr(unsafe.Pointer(msghdr)), + uintptr(flags), + } + return unix.Syscall( + unix.SYS_SOCKETCALL, + _RECVMSG, + uintptr(unsafe.Pointer(&args)), + 0, + ) +} -- cgit v1.2.3-59-g8ed1b