Documentation
¶
Overview ¶
Package zcall provides raw syscall primitives for Linux and Darwin.
Overview ¶
zcall bypasses Go's runtime syscall machinery (entersyscall/exitsyscall) by invoking the kernel directly via raw assembly. This changes how the caller interacts with the Go runtime and is intended for code paths that require direct syscall control, such as io_uring submission and completion.
Design Properties ¶
Runtime Interaction: All syscalls are implemented in pure assembly without Go runtime syscall hooks. The caller is responsible for cooperative scheduling.
Dependencies: This package does not import "syscall" or "golang.org/x/sys/unix". All syscall numbers and constants are defined internally.
Raw Semantics: Functions return (result, errno) directly from the kernel. errno == 0 indicates success; errno != 0 is the raw kernel error number. The caller must handle error translation using zcall.Errno(errno).
Supported Architectures ¶
- linux/amd64: Uses SYSCALL instruction
- linux/arm64: Uses SVC #0 instruction
- linux/riscv64: Uses ECALL instruction
- linux/loong64: Uses SYSCALL instruction
- darwin/arm64: Uses SVC #0x80 instruction
- freebsd/amd64: Uses SYSCALL instruction
Usage ¶
zcall is intended as a building block for I/O libraries that need direct syscall control. Direct usage requires understanding of Linux syscall semantics and careful attention to memory safety.
r1, errno := zcall.Syscall6(zcall.SYS_IO_URING_ENTER, fd, toSubmit, minComplete, flags, sigset, sigsetSize)
if errno != 0 {
// handle error
}
Safety ¶
This package uses unsafe operations for pointer-to-uintptr conversion. Callers must ensure that:
- Pointers passed to syscalls remain valid for the duration of the call
- Memory referenced by pointers is not garbage collected during the call
- Proper synchronization is used for concurrent access
Manual Cooperation ¶
Since zcall bypasses the Go scheduler's syscall hooks, long-running syscalls may starve other goroutines. Callers should:
- Use non-blocking syscalls where possible
- Call spin.Yield() periodically in tight loops
- Consider using GOMAXPROCS > 1 for concurrent workloads
Index ¶
- Constants
- func Accept(fd uintptr, addr unsafe.Pointer, addrlen unsafe.Pointer) (nfd uintptr, errno uintptr)
- func Accept4(fd uintptr, addr unsafe.Pointer, addrlen unsafe.Pointer, flags uintptr) (nfd uintptr, errno uintptr)
- func Bind(fd uintptr, addr unsafe.Pointer, addrlen uintptr) (errno uintptr)
- func Close(fd uintptr) (errno uintptr)
- func Connect(fd uintptr, addr unsafe.Pointer, addrlen uintptr) (errno uintptr)
- func Eventfd2(initval, flags uintptr) (fd uintptr, errno uintptr)
- func Getpeername(fd uintptr, addr unsafe.Pointer, addrlen unsafe.Pointer) (errno uintptr)
- func Getsockname(fd uintptr, addr unsafe.Pointer, addrlen unsafe.Pointer) (errno uintptr)
- func Getsockopt(fd, level, optname uintptr, optval unsafe.Pointer, optlen unsafe.Pointer) (errno uintptr)
- func IfNameToIndex(name string) (uint32, error)
- func IoUringEnter(fd, toSubmit, minComplete, flags uintptr, sig unsafe.Pointer, ...) (r1 uintptr, errno uintptr)
- func IoUringRegister(fd, opcode uintptr, arg unsafe.Pointer, nrArgs uintptr) (r1 uintptr, errno uintptr)
- func IoUringSetup(entries uintptr, params unsafe.Pointer) (fd uintptr, errno uintptr)
- func Ioctl(fd, req uintptr, arg unsafe.Pointer) (errno uintptr)
- func Listen(fd, backlog uintptr) (errno uintptr)
- func MemfdCreate(name unsafe.Pointer, flags uintptr) (fd uintptr, errno uintptr)
- func Mmap(addr unsafe.Pointer, length, prot, flags, fd, offset uintptr) (ptr unsafe.Pointer, errno uintptr)
- func Munmap(addr unsafe.Pointer, length uintptr) (errno uintptr)
- func PidfdGetfd(pidfd, targetfd, flags uintptr) (fd uintptr, errno uintptr)
- func PidfdOpen(pid, flags uintptr) (fd uintptr, errno uintptr)
- func PidfdSendSignal(pidfd, sig uintptr, info unsafe.Pointer, flags uintptr) (errno uintptr)
- func Pipe2(fds *[2]int32, flags uintptr) (errno uintptr)
- func Preadv(fd uintptr, iov unsafe.Pointer, iovcnt uintptr, offset int64) (n uintptr, errno uintptr)
- func Preadv2(fd uintptr, iov unsafe.Pointer, iovcnt uintptr, offset int64, flags uintptr) (n uintptr, errno uintptr)
- func Pwritev(fd uintptr, iov unsafe.Pointer, iovcnt uintptr, offset int64) (n uintptr, errno uintptr)
- func Pwritev2(fd uintptr, iov unsafe.Pointer, iovcnt uintptr, offset int64, flags uintptr) (n uintptr, errno uintptr)
- func Read(fd uintptr, buf []byte) (n uintptr, errno uintptr)
- func Readv(fd uintptr, iov unsafe.Pointer, iovcnt uintptr) (n uintptr, errno uintptr)
- func Recvfrom(fd uintptr, buf []byte, flags uintptr, addr unsafe.Pointer, ...) (n uintptr, errno uintptr)
- func Recvmmsg(fd uintptr, msgvec unsafe.Pointer, vlen, flags uintptr, timeout unsafe.Pointer) (n uintptr, errno uintptr)
- func Recvmsg(fd uintptr, msg unsafe.Pointer, flags uintptr) (n uintptr, errno uintptr)
- func Sendmmsg(fd uintptr, msgvec unsafe.Pointer, vlen, flags uintptr) (n uintptr, errno uintptr)
- func Sendmsg(fd uintptr, msg unsafe.Pointer, flags uintptr) (n uintptr, errno uintptr)
- func Sendto(fd uintptr, buf []byte, flags uintptr, addr unsafe.Pointer, addrlen uintptr) (n uintptr, errno uintptr)
- func Setsockopt(fd, level, optname uintptr, optval unsafe.Pointer, optlen uintptr) (errno uintptr)
- func Shutdown(fd, how uintptr) (errno uintptr)
- func Signalfd4(fd uintptr, mask unsafe.Pointer, maskSize, flags uintptr) (newfd uintptr, errno uintptr)
- func Socket(domain, typ, protocol uintptr) (fd uintptr, errno uintptr)
- func Socketpair(domain, typ, protocol uintptr, fds *[2]int32) (errno uintptr)
- func Splice(fdIn uintptr, offIn *int64, fdOut uintptr, offOut *int64, ...) (n uintptr, errno uintptr)
- func Syscall4(num, a1, a2, a3, a4 uintptr) (r1, errno uintptr)
- func Syscall6(num, a1, a2, a3, a4, a5, a6 uintptr) (r1, errno uintptr)
- func Tee(fdIn, fdOut, length, flags uintptr) (n uintptr, errno uintptr)
- func TimerfdCreate(clockid, flags uintptr) (fd uintptr, errno uintptr)
- func TimerfdGettime(fd uintptr, currValue unsafe.Pointer) (errno uintptr)
- func TimerfdSettime(fd, flags uintptr, newValue, oldValue unsafe.Pointer) (errno uintptr)
- func Vmsplice(fd uintptr, iov unsafe.Pointer, nrSegs, flags uintptr) (n uintptr, errno uintptr)
- func Write(fd uintptr, buf []byte) (n uintptr, errno uintptr)
- func Writev(fd uintptr, iov unsafe.Pointer, iovcnt uintptr) (n uintptr, errno uintptr)
- type Errno
- type Iovec
- type Itimerspec
- type LinkInfo
- type Mmsghdr
- type Msghdr
- type Timespec
Constants ¶
const ( AF_UNSPEC = 0 AF_UNIX = 1 AF_LOCAL = AF_UNIX AF_INET = 2 AF_NETLINK = 16 AF_INET6 = 10 AF_PACKET = 17 )
Socket address families.
const ( NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 NLM_F_MATCH = 0x200 NLM_F_DUMP = NLM_F_ROOT | NLM_F_MATCH NLMSG_ERROR = 0x2 NLMSG_DONE = 0x3 )
Netlink message flags and message types.
const ( RTM_NEWLINK = 0x10 RTM_GETLINK = 0x12 IFLA_ADDRESS = 0x1 IFLA_IFNAME = 0x3 IFLA_MTU = 0x4 )
Route netlink message types and attributes.
const ( IFNAMSIZ = 16 SIOCGIFINDEX = 0x8933 )
Network interface ioctls.
const ( IFF_UP = 0x1 IFF_BROADCAST = 0x2 IFF_LOOPBACK = 0x8 IFF_POINTOPOINT = 0x10 IFF_RUNNING = 0x40 IFF_MULTICAST = 0x1000 )
Network interface flags.
const ( SOCK_STREAM = 1 SOCK_DGRAM = 2 SOCK_RAW = 3 SOCK_RDM = 4 SOCK_SEQPACKET = 5 SOCK_NONBLOCK = 0x800 SOCK_CLOEXEC = 0x80000 )
Socket types.
const ( IPPROTO_IP = 0 IPPROTO_ICMP = 1 IPPROTO_TCP = 6 IPPROTO_UDP = 17 IPPROTO_IPV6 = 41 IPPROTO_SCTP = 132 IPPROTO_RAW = 255 )
IP protocols.
const ( SOL_SOCKET = 1 SOL_IP = 0 SOL_TCP = 6 SOL_UDP = 17 SOL_IPV6 = 41 SOL_SCTP = 132 )
Socket options levels.
const ( SO_DEBUG = 1 SO_REUSEADDR = 2 SO_TYPE = 3 SO_ERROR = 4 SO_DONTROUTE = 5 SO_BROADCAST = 6 SO_SNDBUF = 7 SO_RCVBUF = 8 SO_KEEPALIVE = 9 SO_OOBINLINE = 10 SO_NO_CHECK = 11 SO_PRIORITY = 12 SO_LINGER = 13 SO_BSDCOMPAT = 14 SO_REUSEPORT = 15 SO_RCVLOWAT = 18 SO_SNDLOWAT = 19 SO_RCVTIMEO = 20 SO_SNDTIMEO = 21 SO_ACCEPTCONN = 30 SO_SNDBUFFORCE = 32 SO_RCVBUFFORCE = 33 SO_PROTOCOL = 38 SO_DOMAIN = 39 SO_ZEROCOPY = 60 SO_INCOMING_CPU = 49 SO_BUSY_POLL = 46 )
Socket options (SOL_SOCKET level).
const ( TCP_NODELAY = 1 TCP_MAXSEG = 2 TCP_CORK = 3 TCP_KEEPIDLE = 4 TCP_KEEPINTVL = 5 TCP_KEEPCNT = 6 TCP_SYNCNT = 7 TCP_LINGER2 = 8 TCP_DEFER_ACCEPT = 9 TCP_WINDOW_CLAMP = 10 TCP_INFO = 11 TCP_QUICKACK = 12 TCP_CONGESTION = 13 TCP_USER_TIMEOUT = 18 TCP_FASTOPEN = 23 TCP_NOTSENT_LOWAT = 25 )
TCP options.
const ( UDP_CORK = 1 UDP_ENCAP = 100 UDP_SEGMENT = 103 UDP_GRO = 104 )
UDP options.
const ( IPV6_V6ONLY = 26 IPV6_RECVPKTINFO = 49 IPV6_PKTINFO = 50 IPV6_RECVHOPLIMIT = 51 IPV6_HOPLIMIT = 52 )
IPv6 options.
const ( O_RDONLY = 0x0 O_WRONLY = 0x1 O_RDWR = 0x2 O_CREAT = 0x40 O_EXCL = 0x80 O_NOCTTY = 0x100 O_TRUNC = 0x200 O_APPEND = 0x400 O_NONBLOCK = 0x800 O_SYNC = 0x101000 O_CLOEXEC = 0x80000 O_DIRECT = 0x4000 )
File descriptor flags.
const ( EFD_SEMAPHORE = 0x1 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 )
eventfd flags.
const ( TFD_CLOEXEC = 0x80000 TFD_NONBLOCK = 0x800 TFD_TIMER_ABSTIME = 0x1 )
timerfd flags.
const ( SFD_CLOEXEC = 0x80000 SFD_NONBLOCK = 0x800 )
signalfd flags.
const ( MFD_CLOEXEC = 0x1 MFD_ALLOW_SEALING = 0x2 MFD_HUGETLB = 0x4 MFD_NOEXEC_SEAL = 0x8 MFD_EXEC = 0x10 )
memfd flags.
const ( CLOCK_REALTIME = 0 CLOCK_MONOTONIC = 1 )
Clock IDs for timerfd.
const ( IORING_SETUP_IOPOLL = 1 << 0 IORING_SETUP_SQPOLL = 1 << 1 IORING_SETUP_SQ_AFF = 1 << 2 IORING_SETUP_CQSIZE = 1 << 3 IORING_SETUP_CLAMP = 1 << 4 IORING_SETUP_ATTACH_WQ = 1 << 5 IORING_SETUP_R_DISABLED = 1 << 6 IORING_SETUP_SUBMIT_ALL = 1 << 7 IORING_SETUP_COOP_TASKRUN = 1 << 8 IORING_SETUP_TASKRUN_FLAG = 1 << 9 IORING_SETUP_SQE128 = 1 << 10 IORING_SETUP_CQE32 = 1 << 11 IORING_SETUP_SINGLE_ISSUER = 1 << 12 IORING_SETUP_DEFER_TASKRUN = 1 << 13 IORING_SETUP_NO_MMAP = 1 << 14 IORING_SETUP_REGISTERED_FD_ONLY = 1 << 15 IORING_SETUP_NO_SQARRAY = 1 << 16 IORING_SETUP_HYBRID_IOPOLL = 1 << 17 IORING_SETUP_CQE_MIXED = 1 << 18 IORING_SETUP_SQE_MIXED = 1 << 19 )
io_uring setup flags.
const ( IORING_ENTER_GETEVENTS = 1 << 0 IORING_ENTER_SQ_WAKEUP = 1 << 1 IORING_ENTER_SQ_WAIT = 1 << 2 IORING_ENTER_EXT_ARG = 1 << 3 IORING_ENTER_REGISTERED_RING = 1 << 4 IORING_ENTER_ABS_TIMER = 1 << 5 IORING_ENTER_EXT_ARG_REG = 1 << 6 IORING_ENTER_NO_IOWAIT = 1 << 7 )
io_uring enter flags.
const ( IORING_OP_NOP = 0 IORING_OP_READV = 1 IORING_OP_WRITEV = 2 IORING_OP_FSYNC = 3 IORING_OP_READ_FIXED = 4 IORING_OP_WRITE_FIXED = 5 IORING_OP_POLL_ADD = 6 IORING_OP_POLL_REMOVE = 7 IORING_OP_SYNC_FILE_RANGE = 8 IORING_OP_SENDMSG = 9 IORING_OP_RECVMSG = 10 IORING_OP_TIMEOUT = 11 IORING_OP_TIMEOUT_REMOVE = 12 IORING_OP_ACCEPT = 13 IORING_OP_ASYNC_CANCEL = 14 IORING_OP_LINK_TIMEOUT = 15 IORING_OP_CONNECT = 16 IORING_OP_FALLOCATE = 17 IORING_OP_OPENAT = 18 IORING_OP_CLOSE = 19 IORING_OP_FILES_UPDATE = 20 IORING_OP_STATX = 21 IORING_OP_READ = 22 IORING_OP_WRITE = 23 IORING_OP_FADVISE = 24 IORING_OP_MADVISE = 25 IORING_OP_SEND = 26 IORING_OP_RECV = 27 IORING_OP_OPENAT2 = 28 IORING_OP_EPOLL_CTL = 29 IORING_OP_SPLICE = 30 IORING_OP_PROVIDE_BUFFERS = 31 IORING_OP_REMOVE_BUFFERS = 32 IORING_OP_TEE = 33 IORING_OP_SHUTDOWN = 34 IORING_OP_RENAMEAT = 35 IORING_OP_UNLINKAT = 36 IORING_OP_MKDIRAT = 37 IORING_OP_SYMLINKAT = 38 IORING_OP_LINKAT = 39 IORING_OP_MSG_RING = 40 IORING_OP_FSETXATTR = 41 IORING_OP_SETXATTR = 42 IORING_OP_FGETXATTR = 43 IORING_OP_GETXATTR = 44 IORING_OP_SOCKET = 45 IORING_OP_URING_CMD = 46 IORING_OP_SEND_ZC = 47 IORING_OP_SENDMSG_ZC = 48 IORING_OP_READ_MULTISHOT = 49 IORING_OP_WAITID = 50 IORING_OP_FUTEX_WAIT = 51 IORING_OP_FUTEX_WAKE = 52 IORING_OP_FUTEX_WAITV = 53 IORING_OP_FIXED_FD_INSTALL = 54 IORING_OP_FTRUNCATE = 55 IORING_OP_BIND = 56 IORING_OP_LISTEN = 57 IORING_OP_RECV_ZC = 58 IORING_OP_EPOLL_WAIT = 59 IORING_OP_READV_FIXED = 60 IORING_OP_WRITEV_FIXED = 61 IORING_OP_PIPE = 62 IORING_OP_NOP128 = 63 IORING_OP_URING_CMD128 = 64 )
io_uring opcodes.
const ( IOSQE_FIXED_FILE = 1 << 0 IOSQE_IO_DRAIN = 1 << 1 IOSQE_IO_LINK = 1 << 2 IOSQE_IO_HARDLINK = 1 << 3 IOSQE_ASYNC = 1 << 4 IOSQE_BUFFER_SELECT = 1 << 5 IOSQE_CQE_SKIP_SUCCESS = 1 << 6 )
io_uring SQE flags.
const ( IORING_REGISTER_BUFFERS = 0 IORING_UNREGISTER_BUFFERS = 1 IORING_REGISTER_FILES = 2 IORING_UNREGISTER_FILES = 3 IORING_REGISTER_EVENTFD = 4 IORING_UNREGISTER_EVENTFD = 5 IORING_REGISTER_FILES_UPDATE = 6 IORING_REGISTER_EVENTFD_ASYNC = 7 IORING_REGISTER_PROBE = 8 IORING_REGISTER_PERSONALITY = 9 IORING_UNREGISTER_PERSONALITY = 10 IORING_REGISTER_RESTRICTIONS = 11 IORING_REGISTER_ENABLE_RINGS = 12 IORING_REGISTER_FILES2 = 13 IORING_REGISTER_FILES_UPDATE2 = 14 IORING_REGISTER_BUFFERS2 = 15 IORING_REGISTER_BUFFERS_UPDATE = 16 IORING_REGISTER_IOWQ_AFF = 17 IORING_UNREGISTER_IOWQ_AFF = 18 IORING_REGISTER_IOWQ_MAX_WORKERS = 19 IORING_REGISTER_RING_FDS = 20 IORING_UNREGISTER_RING_FDS = 21 IORING_REGISTER_PBUF_RING = 22 IORING_UNREGISTER_PBUF_RING = 23 IORING_REGISTER_SYNC_CANCEL = 24 IORING_REGISTER_FILE_ALLOC_RANGE = 25 IORING_REGISTER_PBUF_STATUS = 26 IORING_REGISTER_NAPI = 27 IORING_UNREGISTER_NAPI = 28 IORING_REGISTER_CLOCK = 29 IORING_REGISTER_CLONE_BUFFERS = 30 IORING_REGISTER_SEND_MSG_RING = 31 IORING_REGISTER_ZCRX_IFQ = 32 IORING_REGISTER_RESIZE_RINGS = 33 IORING_REGISTER_MEM_REGION = 34 IORING_REGISTER_QUERY = 35 IORING_REGISTER_ZCRX_CTRL = 36 IORING_REGISTER_USE_REGISTERED_RING = 1 << 31 )
io_uring register opcodes.
const ( PROT_NONE = 0x0 PROT_READ = 0x1 PROT_WRITE = 0x2 PROT_EXEC = 0x4 )
mmap protection flags.
const ( MAP_SHARED = 0x1 MAP_PRIVATE = 0x2 MAP_FIXED = 0x10 MAP_ANONYMOUS = 0x20 MAP_POPULATE = 0x8000 )
mmap flags.
const ( POLLIN = 0x1 POLLPRI = 0x2 POLLOUT = 0x4 POLLERR = 0x8 POLLHUP = 0x10 POLLNVAL = 0x20 POLLRDHUP = 0x2000 )
Poll events.
const ( SHUT_RD = 0 SHUT_WR = 1 SHUT_RDWR = 2 )
Shutdown how.
const ( MSG_OOB = 0x1 MSG_PEEK = 0x2 MSG_DONTROUTE = 0x4 MSG_CTRUNC = 0x8 MSG_PROXY = 0x10 MSG_TRUNC = 0x20 MSG_DONTWAIT = 0x40 MSG_EOR = 0x80 MSG_WAITALL = 0x100 MSG_FIN = 0x200 MSG_SYN = 0x400 MSG_CONFIRM = 0x800 MSG_RST = 0x1000 MSG_ERRQUEUE = 0x2000 MSG_NOSIGNAL = 0x4000 MSG_MORE = 0x8000 MSG_WAITFORONE = 0x10000 MSG_BATCH = 0x40000 MSG_ZEROCOPY = 0x4000000 MSG_FASTOPEN = 0x20000000 MSG_CMSG_CLOEXEC = 0x40000000 )
MSG flags for send/recv.
const ( SPLICE_F_MOVE = 0x1 SPLICE_F_NONBLOCK = 0x2 SPLICE_F_MORE = 0x4 SPLICE_F_GIFT = 0x8 )
Splice flags.
const ( RWF_HIPRI = 0x1 RWF_DSYNC = 0x2 RWF_SYNC = 0x4 RWF_NOWAIT = 0x8 RWF_APPEND = 0x10 )
RWF flags for preadv2/pwritev2.
const ( // Basic I/O SYS_READ = 0 SYS_WRITE = 1 SYS_CLOSE = 3 SYS_FSTAT = 5 SYS_MMAP = 9 SYS_MUNMAP = 11 SYS_IOCTL = 16 SYS_FTRUNCATE = 77 // Vectored I/O SYS_READV = 19 SYS_WRITEV = 20 SYS_PREADV = 295 SYS_PWRITEV = 296 SYS_PREADV2 = 327 SYS_PWRITEV2 = 328 // Networking - basic SYS_SOCKET = 41 SYS_CONNECT = 42 SYS_ACCEPT = 43 SYS_SENDTO = 44 SYS_RECVFROM = 45 SYS_SENDMSG = 46 SYS_RECVMSG = 47 SYS_SHUTDOWN = 48 SYS_BIND = 49 SYS_LISTEN = 50 SYS_GETSOCKNAME = 51 SYS_GETPEERNAME = 52 SYS_SOCKETPAIR = 53 SYS_SETSOCKOPT = 54 SYS_GETSOCKOPT = 55 // Zero-copy and pipe SYS_SPLICE = 275 SYS_TEE = 276 SYS_VMSPLICE = 278 SYS_PIPE2 = 293 // Timers and events SYS_TIMERFD_CREATE = 283 SYS_TIMERFD_SETTIME = 286 SYS_TIMERFD_GETTIME = 287 SYS_ACCEPT4 = 288 SYS_EVENTFD2 = 290 // Multi-message SYS_RECVMMSG = 299 SYS_SENDMMSG = 307 // io_uring SYS_IO_URING_SETUP = 425 SYS_IO_URING_ENTER = 426 SYS_IO_URING_REGISTER = 427 SYS_PRLIMIT64 = 302 // signalfd, pidfd, memfd SYS_SIGNALFD4 = 289 SYS_MEMFD_CREATE = 319 SYS_PIDFD_SEND_SIGNAL = 424 SYS_PIDFD_OPEN = 434 SYS_PIDFD_GETFD = 438 )
Syscall numbers for Linux on amd64. Reference: arch/x86/entry/syscalls/syscall_64.tbl
const (
IP_TRANSPARENT = 19
)
IP options.
const (
NETLINK_ROUTE = 0
)
Netlink protocols.
const (
PIDFD_NONBLOCK = 0x800
)
pidfd flags.
Variables ¶
This section is empty.
Functions ¶
func Accept4 ¶
func Accept4(fd uintptr, addr unsafe.Pointer, addrlen unsafe.Pointer, flags uintptr) (nfd uintptr, errno uintptr)
Accept4 accepts a connection on a socket with flags.
func Getpeername ¶
Getpeername gets the remote address of a socket.
func Getsockname ¶
Getsockname gets the local address of a socket.
func Getsockopt ¶
func Getsockopt(fd, level, optname uintptr, optval unsafe.Pointer, optlen unsafe.Pointer) (errno uintptr)
Getsockopt gets a socket option.
func IfNameToIndex ¶ added in v0.4.0
IfNameToIndex resolves a network interface name to its kernel index.
func IoUringEnter ¶
func IoUringEnter(fd, toSubmit, minComplete, flags uintptr, sig unsafe.Pointer, sigsetSize uintptr) (r1 uintptr, errno uintptr)
IoUringEnter submits I/O requests and/or waits for completions.
func IoUringRegister ¶
func IoUringRegister(fd, opcode uintptr, arg unsafe.Pointer, nrArgs uintptr) (r1 uintptr, errno uintptr)
IoUringRegister registers resources with an io_uring instance.
func IoUringSetup ¶
IoUringSetup sets up an io_uring instance.
func MemfdCreate ¶
MemfdCreate creates an anonymous, memory-backed file descriptor. The name is a null-terminated string used for debugging (visible in /proc/self/fd/). Flags may include MFD_CLOEXEC, MFD_ALLOW_SEALING, and MFD_HUGETLB. Returns the file descriptor and errno.
func Mmap ¶
func Mmap(addr unsafe.Pointer, length, prot, flags, fd, offset uintptr) (ptr unsafe.Pointer, errno uintptr)
Mmap maps files or devices into memory. Returns unsafe.Pointer to enable vet-clean pointer arithmetic with unsafe.Add.
func PidfdGetfd ¶
PidfdGetfd duplicates a file descriptor from another process.
func PidfdSendSignal ¶
PidfdSendSignal sends a signal to a process.
func Preadv ¶
func Preadv(fd uintptr, iov unsafe.Pointer, iovcnt uintptr, offset int64) (n uintptr, errno uintptr)
Preadv reads into multiple buffers at a given offset.
func Preadv2 ¶
func Preadv2(fd uintptr, iov unsafe.Pointer, iovcnt uintptr, offset int64, flags uintptr) (n uintptr, errno uintptr)
Preadv2 reads into multiple buffers at a given offset with flags.
func Pwritev ¶
func Pwritev(fd uintptr, iov unsafe.Pointer, iovcnt uintptr, offset int64) (n uintptr, errno uintptr)
Pwritev writes from multiple buffers at a given offset.
func Pwritev2 ¶
func Pwritev2(fd uintptr, iov unsafe.Pointer, iovcnt uintptr, offset int64, flags uintptr) (n uintptr, errno uintptr)
Pwritev2 writes from multiple buffers at a given offset with flags.
func Recvfrom ¶
func Recvfrom(fd uintptr, buf []byte, flags uintptr, addr unsafe.Pointer, addrlen unsafe.Pointer) (n uintptr, errno uintptr)
Recvfrom receives a message from a socket.
func Recvmmsg ¶
func Recvmmsg(fd uintptr, msgvec unsafe.Pointer, vlen, flags uintptr, timeout unsafe.Pointer) (n uintptr, errno uintptr)
Recvmmsg receives multiple messages from a socket.
func Sendto ¶
func Sendto(fd uintptr, buf []byte, flags uintptr, addr unsafe.Pointer, addrlen uintptr) (n uintptr, errno uintptr)
Sendto sends a message on a socket.
func Setsockopt ¶
Setsockopt sets a socket option.
func Signalfd4 ¶
func Signalfd4(fd uintptr, mask unsafe.Pointer, maskSize, flags uintptr) (newfd uintptr, errno uintptr)
Signalfd4 creates or modifies a file descriptor for signal handling. If fd is -1 (^uintptr(0)), a new signalfd is created; otherwise, the existing fd is modified. The mask points to a sigset_t specifying which signals to accept. Flags may include SFD_NONBLOCK and SFD_CLOEXEC. Returns the file descriptor and errno.
func Socketpair ¶
Socketpair creates a pair of connected sockets.
func Splice ¶
func Splice(fdIn uintptr, offIn *int64, fdOut uintptr, offOut *int64, length, flags uintptr) (n uintptr, errno uintptr)
Splice moves data between two file descriptors.
func TimerfdCreate ¶
TimerfdCreate creates a timerfd.
func TimerfdGettime ¶
TimerfdGettime gets the current setting of a timerfd.
func TimerfdSettime ¶
TimerfdSettime arms or disarms a timerfd.
Types ¶
type Errno ¶
type Errno uintptr
Errno is a raw system error number. It implements the error interface and provides helper methods for common error patterns.
const ( EPERM Errno = 1 ENOENT Errno = 2 ESRCH Errno = 3 EINTR Errno = 4 EIO Errno = 5 ENXIO Errno = 6 E2BIG Errno = 7 ENOEXEC Errno = 8 EBADF Errno = 9 ECHILD Errno = 10 EAGAIN Errno = 11 EWOULDBLOCK Errno = EAGAIN ENOMEM Errno = 12 EACCES Errno = 13 EFAULT Errno = 14 ENOTBLK Errno = 15 EBUSY Errno = 16 EEXIST Errno = 17 EXDEV Errno = 18 ENODEV Errno = 19 ENOTDIR Errno = 20 EISDIR Errno = 21 EINVAL Errno = 22 ENFILE Errno = 23 EMFILE Errno = 24 ENOTTY Errno = 25 ETXTBSY Errno = 26 EFBIG Errno = 27 ENOSPC Errno = 28 ESPIPE Errno = 29 EROFS Errno = 30 EMLINK Errno = 31 EPIPE Errno = 32 EDOM Errno = 33 ERANGE Errno = 34 EDEADLK Errno = 35 EDEADLOCK Errno = EDEADLK ENAMETOOLONG Errno = 36 ENOLCK Errno = 37 ENOSYS Errno = 38 ENOTEMPTY Errno = 39 ELOOP Errno = 40 ENOMSG Errno = 42 EIDRM Errno = 43 ECHRNG Errno = 44 EL2NSYNC Errno = 45 EL3HLT Errno = 46 EL3RST Errno = 47 ELNRNG Errno = 48 EUNATCH Errno = 49 ENOCSI Errno = 50 EL2HLT Errno = 51 EBADE Errno = 52 EBADR Errno = 53 EXFULL Errno = 54 ENOANO Errno = 55 EBADRQC Errno = 56 EBADSLT Errno = 57 EBFONT Errno = 59 ENOSTR Errno = 60 ENODATA Errno = 61 ETIME Errno = 62 ENOSR Errno = 63 ENONET Errno = 64 ENOPKG Errno = 65 EREMOTE Errno = 66 ENOLINK Errno = 67 EADV Errno = 68 ESRMNT Errno = 69 ECOMM Errno = 70 EPROTO Errno = 71 EMULTIHOP Errno = 72 EDOTDOT Errno = 73 EBADMSG Errno = 74 EOVERFLOW Errno = 75 ENOTUNIQ Errno = 76 EBADFD Errno = 77 EREMCHG Errno = 78 ELIBACC Errno = 79 ELIBBAD Errno = 80 ELIBSCN Errno = 81 ELIBMAX Errno = 82 ELIBEXEC Errno = 83 EILSEQ Errno = 84 ERESTART Errno = 85 ESTRPIPE Errno = 86 EUSERS Errno = 87 ENOTSOCK Errno = 88 EDESTADDRREQ Errno = 89 EMSGSIZE Errno = 90 EPROTOTYPE Errno = 91 ENOPROTOOPT Errno = 92 EPROTONOSUPPORT Errno = 93 ESOCKTNOSUPPORT Errno = 94 EOPNOTSUPP Errno = 95 ENOTSUP Errno = EOPNOTSUPP EPFNOSUPPORT Errno = 96 EAFNOSUPPORT Errno = 97 EADDRINUSE Errno = 98 EADDRNOTAVAIL Errno = 99 ENETDOWN Errno = 100 ENETUNREACH Errno = 101 ENETRESET Errno = 102 ECONNABORTED Errno = 103 ECONNRESET Errno = 104 ENOBUFS Errno = 105 EISCONN Errno = 106 ENOTCONN Errno = 107 ESHUTDOWN Errno = 108 ETOOMANYREFS Errno = 109 ETIMEDOUT Errno = 110 ECONNREFUSED Errno = 111 EHOSTDOWN Errno = 112 EHOSTUNREACH Errno = 113 EALREADY Errno = 114 EINPROGRESS Errno = 115 ESTALE Errno = 116 EUCLEAN Errno = 117 ENOTNAM Errno = 118 ENAVAIL Errno = 119 EISNAM Errno = 120 EREMOTEIO Errno = 121 EDQUOT Errno = 122 ENOMEDIUM Errno = 123 EMEDIUMTYPE Errno = 124 ECANCELED Errno = 125 ENOKEY Errno = 126 EKEYEXPIRED Errno = 127 EKEYREVOKED Errno = 128 EKEYREJECTED Errno = 129 EOWNERDEAD Errno = 130 ENOTRECOVERABLE Errno = 131 ERFKILL Errno = 132 EHWPOISON Errno = 133 )
Common Linux error numbers.
func (Errno) Is ¶
Is reports whether the error is equal to the target. This enables errors.Is() compatibility.
type Iovec ¶
Iovec represents a scatter/gather I/O vector. Used by readv, writev, preadv, pwritev, and related syscalls.
type Itimerspec ¶
Itimerspec represents an interval timer specification.
type LinkInfo ¶ added in v0.4.0
LinkInfo contains raw Linux link-table data returned by netlink.
func InterfaceByIndex ¶ added in v0.4.0
InterfaceByIndex resolves a network interface index from the Linux link table.
func InterfaceByName ¶ added in v0.4.0
InterfaceByName resolves a network interface name from the Linux link table.
func Interfaces ¶ added in v0.4.0
Interfaces returns the current Linux network link table.