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  }