diff --git a/caddyhttp/httpserver/server.go b/caddyhttp/httpserver/server.go index 3bd434c2f..1fc86fc8d 100644 --- a/caddyhttp/httpserver/server.go +++ b/caddyhttp/httpserver/server.go @@ -554,16 +554,20 @@ type tcpKeepAliveListener struct { } // Accept accepts the connection with a keep-alive enabled. -func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) { +func (ln tcpKeepAliveListener) Accept() (net.Conn, error) { tc, err := ln.AcceptTCP() if err != nil { - return + return nil, err } if err = tc.SetKeepAlive(true); err != nil { - return + return nil, err } - if err = tc.SetKeepAlivePeriod(3 * time.Minute); err != nil { - return + // OpenBSD has no user-settable per-socket TCP keepalive + // https://github.com/caddyserver/caddy/pull/2787 + if runtime.GOOS != "openbsd" { + if err = tc.SetKeepAlivePeriod(3 * time.Minute); err != nil { + return nil, err + } } return tc, nil }