func runEchoServer(listenerNewer ListenNewer) net.Listener { return listenAccept(listenerNewer, func(c net.Conn) { defer c.Close() _, err := io.Copy(c, c) if kmgNet.IsSocketCloseError(err) { return } mustNotError(err) }) }
func listenAccept(listenerNewer ListenNewer, handler func(c net.Conn)) net.Listener { listener, err := listenerNewer() mustNotError(err) go func() { for { c, err := listener.Accept() if kmgNet.IsSocketCloseError(err) { return } mustNotError(err) go handler(c) } }() return listener }
func (s *httpNetServer) Start() error { var err error s.listener, err = net.Listen("tcp", s.addr) if err != nil { return err } go func() { err := s.Server.Serve(s.listener) if err != nil { if kmgNet.IsSocketCloseError(err) { return } panic(err) } }() return nil }