Rework sticky sockets

This commit is contained in:
Jason A. Donenfeld
2018-04-20 06:51:28 +02:00
parent f5c256affd
commit 5ba84696e2
3 changed files with 172 additions and 291 deletions
+172 -208
View File
File diff suppressed because it is too large Load Diff
-30
View File
@@ -1,30 +0,0 @@
// +build linux,!386
/* Copyright 2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
*/
package main
import (
"golang.org/x/sys/unix"
"syscall"
"unsafe"
)
func sendmsg(fd int, msghdr *unix.Msghdr, flags int) (uintptr, uintptr, syscall.Errno) {
return unix.Syscall(
unix.SYS_SENDMSG,
uintptr(fd),
uintptr(unsafe.Pointer(msghdr)),
uintptr(flags),
)
}
func recvmsg(fd int, msghdr *unix.Msghdr, flags int) (uintptr, uintptr, syscall.Errno) {
return unix.Syscall(
unix.SYS_RECVMSG,
uintptr(fd),
uintptr(unsafe.Pointer(msghdr)),
uintptr(flags),
)
}
-53
View File
@@ -1,53 +0,0 @@
// +build linux,386
/* Copyright 2018 Jason A. Donenfeld <Jason@zx2c4.com>. 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,
)
}