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 }