diff options
Diffstat (limited to 'forged/internal/common/misc/net.go')
-rw-r--r-- | forged/internal/common/misc/net.go | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/forged/internal/common/misc/net.go b/forged/internal/common/misc/net.go index 2c6b0a5..967ea77 100644 --- a/forged/internal/common/misc/net.go +++ b/forged/internal/common/misc/net.go @@ -1,20 +1,23 @@ package misc import ( + "context" "errors" "fmt" "net" "syscall" ) -func ListenUnixSocket(path string) (listener net.Listener, replaced bool, err error) { - listener, err = net.Listen("unix", path) +func ListenUnixSocket(ctx context.Context, path string) (listener net.Listener, replaced bool, err error) { + listenConfig := net.ListenConfig{} //exhaustruct:ignore + listener, err = listenConfig.Listen(ctx, "unix", path) if errors.Is(err, syscall.EADDRINUSE) { replaced = true - if unlinkErr := syscall.Unlink(path); unlinkErr != nil { + unlinkErr := syscall.Unlink(path) + if unlinkErr != nil { return listener, false, fmt.Errorf("remove existing socket %q: %w", path, unlinkErr) } - listener, err = net.Listen("unix", path) + listener, err = listenConfig.Listen(ctx, "unix", path) } if err != nil { return listener, replaced, fmt.Errorf("listen on unix socket %q: %w", path, err) @@ -22,14 +25,15 @@ func ListenUnixSocket(path string) (listener net.Listener, replaced bool, err er return listener, replaced, nil } -func Listen(net_, addr string) (listener net.Listener, err error) { +func Listen(ctx context.Context, net_, addr string) (listener net.Listener, err error) { if net_ == "unix" { - listener, _, err = ListenUnixSocket(addr) + listener, _, err = ListenUnixSocket(ctx, addr) if err != nil { return listener, fmt.Errorf("listen unix socket for web: %w", err) } } else { - listener, err = net.Listen(net_, addr) + listenConfig := net.ListenConfig{} //exhaustruct:ignore + listener, err = listenConfig.Listen(ctx, net_, addr) if err != nil { return listener, fmt.Errorf("listen %s for web: %w", net_, err) } |