github.com/containers/libpod@v1.9.4-0.20220419124438-4284fd425507/pkg/api/server/listener_api.go (about) 1 package server 2 3 import ( 4 "net" 5 "os" 6 "path/filepath" 7 8 "github.com/pkg/errors" 9 ) 10 11 // ListenUnix follows stdlib net.Listen() API, providing a unix listener for given path 12 // ListenUnix will delete and create files/directories as needed 13 func ListenUnix(network string, path string) (net.Listener, error) { 14 // setup custom listener for API server 15 err := os.MkdirAll(filepath.Dir(path), 0770) 16 if err != nil { 17 return nil, errors.Wrapf(err, "api.ListenUnix() failed to create %s", filepath.Dir(path)) 18 } 19 os.Remove(path) 20 21 listener, err := net.Listen(network, path) 22 if err != nil { 23 return nil, errors.Wrapf(err, "api.ListenUnix() failed to create net.Listen(%s, %s)", network, path) 24 } 25 26 _, err = os.Stat(path) 27 if err != nil { 28 return nil, errors.Wrapf(err, "net.Listen(%s, %s) failed to report the failure to create socket", network, path) 29 } 30 return listener, nil 31 }