summaryrefslogtreecommitdiff
path: root/cmd/ioworkload/scenario_socket.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-19 15:00:02 +0300
committerPaul Buetow <paul@buetow.org>2026-05-19 15:00:02 +0300
commit71ef23ae16b0e310e66f3bf622cebefb9ec6b208 (patch)
treed61bc007207fbd3f4e21de34874de0248692b9b2 /cmd/ioworkload/scenario_socket.go
parent9cc2c7b3c4c7a1f1837a4a5260f11ccea5814c83 (diff)
v6: add KindAccept and wire accept/accept4
Diffstat (limited to 'cmd/ioworkload/scenario_socket.go')
-rw-r--r--cmd/ioworkload/scenario_socket.go46
1 files changed, 46 insertions, 0 deletions
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
+}