diff options
author | Y.Horie <u5.horie@gmail.com> | 2022-06-21 04:42:05 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-20 21:42:05 +0200 |
commit | bc24f9d68352215b1f4aa6bddbffacd42cea8f73 (patch) | |
tree | 8655d26014967c96fe811fea6cc8d1f5667ecea2 /server.go | |
parent | Add `ConnPoolStrategy` field to client (#1317) (diff) | |
download | fasthttp-bc24f9d68352215b1f4aa6bddbffacd42cea8f73.tar.gz fasthttp-bc24f9d68352215b1f4aa6bddbffacd42cea8f73.tar.bz2 fasthttp-bc24f9d68352215b1f4aa6bddbffacd42cea8f73.zip |
Diffstat (limited to 'server.go')
-rw-r--r-- | server.go | 71 |
1 files changed, 21 insertions, 50 deletions
@@ -1554,34 +1554,6 @@ func (s *Server) getNextProto(c net.Conn) (proto string, err error) { return } -// tcpKeepAliveListener sets TCP keep-alive timeouts on accepted -// connections. It's used by ListenAndServe, ListenAndServeTLS and -// ListenAndServeTLSEmbed so dead TCP connections (e.g. closing laptop mid-download) -// eventually go away. -type tcpKeepaliveListener struct { - *net.TCPListener - keepalive bool - keepalivePeriod time.Duration -} - -func (ln tcpKeepaliveListener) Accept() (net.Conn, error) { - tc, err := ln.AcceptTCP() - if err != nil { - return nil, err - } - if err := tc.SetKeepAlive(ln.keepalive); err != nil { - tc.Close() //nolint:errcheck - return nil, err - } - if ln.keepalivePeriod > 0 { - if err := tc.SetKeepAlivePeriod(ln.keepalivePeriod); err != nil { - tc.Close() //nolint:errcheck - return nil, err - } - } - return tc, nil -} - // ListenAndServe serves HTTP requests from the given TCP4 addr. // // Pass custom listener to Serve if you need listening on non-TCP4 media @@ -1593,13 +1565,6 @@ func (s *Server) ListenAndServe(addr string) error { if err != nil { return err } - if tcpln, ok := ln.(*net.TCPListener); ok { - return s.Serve(tcpKeepaliveListener{ - TCPListener: tcpln, - keepalive: s.TCPKeepalive, - keepalivePeriod: s.TCPKeepalivePeriod, - }) - } return s.Serve(ln) } @@ -1638,13 +1603,6 @@ func (s *Server) ListenAndServeTLS(addr, certFile, keyFile string) error { if err != nil { return err } - if tcpln, ok := ln.(*net.TCPListener); ok { - return s.ServeTLS(tcpKeepaliveListener{ - TCPListener: tcpln, - keepalive: s.TCPKeepalive, - keepalivePeriod: s.TCPKeepalivePeriod, - }, certFile, keyFile) - } return s.ServeTLS(ln, certFile, keyFile) } @@ -1664,13 +1622,6 @@ func (s *Server) ListenAndServeTLSEmbed(addr string, certData, keyData []byte) e if err != nil { return err } - if tcpln, ok := ln.(*net.TCPListener); ok { - return s.ServeTLSEmbed(tcpKeepaliveListener{ - TCPListener: tcpln, - keepalive: s.TCPKeepalive, - keepalivePeriod: s.TCPKeepalivePeriod, - }, certData, keyData) - } return s.ServeTLSEmbed(ln, certData, keyData) } @@ -1910,7 +1861,27 @@ func (s *Server) Shutdown() error { func acceptConn(s *Server, ln net.Listener, lastPerIPErrorTime *time.Time) (net.Conn, error) { for { - c, err := ln.Accept() + var c net.Conn + var err error + if tl, ok := ln.(*net.TCPListener); ok && s.TCPKeepalive { + tc, err := tl.AcceptTCP() + if err != nil { + return nil, err + } + if err := tc.SetKeepAlive(s.TCPKeepalive); err != nil { + tc.Close() //nolint:errcheck + return nil, err + } + if s.TCPKeepalivePeriod > 0 { + if err := tc.SetKeepAlivePeriod(s.TCPKeepalivePeriod); err != nil { + tc.Close() //nolint:errcheck + return nil, err + } + } + c = tc + } else { + c, err = ln.Accept() + } if err != nil { if c != nil { panic("BUG: net.Listener returned non-nil conn and non-nil error") |