diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-19 15:40:34 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-19 15:40:34 +0300 |
| commit | 03a3513e0d8366fb2d04e3d055a3a98b63b9e708 (patch) | |
| tree | 43e3924d9537c73369ac599a360e948cf6216c7b /cmd/ioworkload/scenario_socket.go | |
| parent | 71ef23ae16b0e310e66f3bf622cebefb9ec6b208 (diff) | |
v6: cover plain accept integration and filter path
Diffstat (limited to 'cmd/ioworkload/scenario_socket.go')
| -rw-r--r-- | cmd/ioworkload/scenario_socket.go | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/cmd/ioworkload/scenario_socket.go b/cmd/ioworkload/scenario_socket.go index 9885cbb..db95ad4 100644 --- a/cmd/ioworkload/scenario_socket.go +++ b/cmd/ioworkload/scenario_socket.go @@ -75,3 +75,48 @@ func socketAcceptLifecycle() error { } return nil } + +func socketAcceptLifecyclePlain() error { + dir, err := os.MkdirTemp("", "ioworkload-socket-accept-plain-") + if err != nil { + return fmt.Errorf("create temp dir: %w", err) + } + defer os.RemoveAll(dir) + + socketPath := filepath.Join(dir, "accept.sock") + + listenerFD, err := syscall.Socket(syscall.AF_UNIX, syscall.SOCK_STREAM, 0) + if err != nil { + return fmt.Errorf("listener socket: %w", err) + } + defer syscall.Close(listenerFD) //nolint:errcheck + + if err := syscall.Bind(listenerFD, &syscall.SockaddrUnix{Name: socketPath}); err != nil { + return fmt.Errorf("bind: %w", err) + } + if err := syscall.Listen(listenerFD, 1); err != nil { + return fmt.Errorf("listen: %w", err) + } + + clientFD, err := syscall.Socket(syscall.AF_UNIX, syscall.SOCK_STREAM, 0) + if err != nil { + return fmt.Errorf("client socket: %w", err) + } + defer syscall.Close(clientFD) //nolint:errcheck + + if err := syscall.Connect(clientFD, &syscall.SockaddrUnix{Name: socketPath}); err != nil { + return fmt.Errorf("connect: %w", err) + } + + acceptedFDRaw, _, errno := syscall.Syscall(syscall.SYS_ACCEPT, uintptr(listenerFD), 0, 0) + if errno != 0 { + return fmt.Errorf("accept: %w", errno) + } + acceptedFD := int(acceptedFDRaw) + defer syscall.Close(acceptedFD) //nolint:errcheck + + if err := syscall.Shutdown(acceptedFD, syscall.SHUT_RDWR); err != nil { + return fmt.Errorf("shutdown accepted fd: %w", err) + } + return nil +} |
