github.com/nsqio/nsq@v1.3.0/internal/http_api/http_server.go (about) 1 package http_api 2 3 import ( 4 "fmt" 5 "log" 6 "net" 7 "net/http" 8 "strings" 9 10 "github.com/nsqio/nsq/internal/lg" 11 ) 12 13 type logWriter struct { 14 logf lg.AppLogFunc 15 } 16 17 func (l logWriter) Write(p []byte) (int, error) { 18 l.logf(lg.WARN, "%s", string(p)) 19 return len(p), nil 20 } 21 22 func Serve(listener net.Listener, handler http.Handler, proto string, logf lg.AppLogFunc) error { 23 logf(lg.INFO, "%s: listening on %s", proto, listener.Addr()) 24 25 server := &http.Server{ 26 Handler: handler, 27 ErrorLog: log.New(logWriter{logf}, "", 0), 28 } 29 err := server.Serve(listener) 30 // theres no direct way to detect this error because it is not exposed 31 if err != nil && !strings.Contains(err.Error(), "use of closed network connection") { 32 return fmt.Errorf("http.Serve() error - %s", err) 33 } 34 35 logf(lg.INFO, "%s: closing %s", proto, listener.Addr()) 36 37 return nil 38 }