From 71ef23ae16b0e310e66f3bf622cebefb9ec6b208 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 19 May 2026 15:00:02 +0300 Subject: v6: add KindAccept and wire accept/accept4 --- cmd/ioworkload/scenario_socket.go | 46 +++++++++++++++++++++++++++++++++++++++ cmd/ioworkload/scenarios.go | 1 + 2 files changed, 47 insertions(+) (limited to 'cmd') diff --git a/cmd/ioworkload/scenario_socket.go b/cmd/ioworkload/scenario_socket.go index f633186..9885cbb 100644 --- a/cmd/ioworkload/scenario_socket.go +++ b/cmd/ioworkload/scenario_socket.go @@ -2,6 +2,8 @@ package main import ( "fmt" + "os" + "path/filepath" "syscall" ) @@ -29,3 +31,47 @@ func socketpairBasic() error { } return nil } + +func socketAcceptLifecycle() error { + dir, err := os.MkdirTemp("", "ioworkload-socket-accept-") + 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) + } + + acceptedFD, _, err := syscall.Accept4(listenerFD, 0) + if err != nil { + return fmt.Errorf("accept4: %w", err) + } + 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 +} diff --git a/cmd/ioworkload/scenarios.go b/cmd/ioworkload/scenarios.go index aedbffa..db5b549 100644 --- a/cmd/ioworkload/scenarios.go +++ b/cmd/ioworkload/scenarios.go @@ -27,6 +27,7 @@ var scenarios = map[string]func() error{ "retbytes-phase-a": retbytesPhaseA, "socket-basic": socketBasic, "socketpair-basic": socketpairBasic, + "socket-accept-lifecycle": socketAcceptLifecycle, "family-mixed": familyMixed, "close-basic": closeBasic, "close-range": closeRange, -- cgit v1.2.3