summaryrefslogtreecommitdiffhomepage
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/fd/fd.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/pkg/fd/fd.go b/pkg/fd/fd.go
index 83bcfe220..c3acd0fe2 100644
--- a/pkg/fd/fd.go
+++ b/pkg/fd/fd.go
@@ -22,6 +22,7 @@ import (
"runtime"
"sync/atomic"
"syscall"
+ "net"
)
// ReadWriter implements io.ReadWriter, io.ReaderAt, and io.WriterAt for fd. It
@@ -185,6 +186,21 @@ func OpenAt(dir *FD, path string, flags int, mode uint32) (*FD, error) {
return New(f), nil
}
+// OpenUnix TODO: DOC
+func OpenUnix(path string) (*FD, error) {
+ addr, _ := net.ResolveUnixAddr("unix", path)
+ f, err := net.DialUnix("unix", nil, addr); if err != nil {
+ return nil, fmt.Errorf("unable to open socket: %q, err: %v", path, err)
+ }
+ fConnd, err := f.File(); if err != nil {
+ return nil, fmt.Errorf("unable to convert to os.File: %q, err: %v", path, err)
+ }
+ fdConnd, err := NewFromFile(fConnd); if err != nil {
+ return nil, fmt.Errorf("unable to convert os.File to fd.FD: %q, err: %v", path, err)
+ }
+ return fdConnd, nil
+}
+
// Close closes the file descriptor contained in the FD.
//
// Close is safe to call multiple times, but will return an error after the