github.com/cloudfoundry-attic/garden-linux@v0.333.2-candidate/iodaemon/link/fake_unix_server/fake_unix_server.go (about)

     1  package fake_unix_server
     2  
     3  import (
     4  	"net"
     5  	"sync"
     6  )
     7  
     8  type FakeUnixServer struct {
     9  	connectionHandler func(net.Conn)
    10  	mutex             *sync.RWMutex
    11  	listener          net.Listener
    12  }
    13  
    14  func NewFakeUnixServer(unixSocketPath string) (*FakeUnixServer, error) {
    15  	listener, err := net.Listen("unix", unixSocketPath)
    16  	if err != nil {
    17  		return nil, err
    18  	}
    19  
    20  	return &FakeUnixServer{
    21  		connectionHandler: func(conn net.Conn) {
    22  			conn.Close()
    23  		},
    24  		mutex:    new(sync.RWMutex),
    25  		listener: listener,
    26  	}, nil
    27  }
    28  
    29  func (s *FakeUnixServer) Serve() error {
    30  	for {
    31  		conn, err := s.listener.Accept()
    32  		if err != nil {
    33  			return err
    34  		}
    35  
    36  		s.mutex.RLock()
    37  		go s.connectionHandler(conn)
    38  		s.mutex.RUnlock()
    39  	}
    40  
    41  	return nil
    42  }
    43  
    44  func (s *FakeUnixServer) SetConnectionHandler(handler func(net.Conn)) {
    45  	s.mutex.Lock()
    46  	s.connectionHandler = handler
    47  	s.mutex.Unlock()
    48  }
    49  
    50  func (s *FakeUnixServer) Stop() error {
    51  	return s.listener.Close()
    52  }