diff --git a/lib/gat/acceptor.go b/lib/gat/acceptor.go index 6a14f7960bcb97e28405fccf34b5418a955b4222..d58aaa96b36f94db84e44461dff66f2c5740fd8d 100644 --- a/lib/gat/acceptor.go +++ b/lib/gat/acceptor.go @@ -92,18 +92,35 @@ func serve(client fed.Conn, acceptParams frontends.AcceptParams, pools Pools) er func Serve(acceptor Acceptor, pools Pools) error { for { - conn, acceptParams, err := acceptor.Accept() + netConn, err := acceptor.Listener.Accept() if err != nil { if errors.Is(err, net.ErrClosed) { return nil } - log.Print("error accepting client: ", err) + log.Print("error accepting connection: ", err) continue } + conn := fed.WrapNetConn(netConn) + go func() { - err := serve(conn, acceptParams, pools) + defer func() { + _ = conn.Close() + }() + + ctx := frontends.AcceptContext{ + Conn: conn, + Options: acceptor.Options, + } + acceptParams, acceptErr := frontends.Accept(&ctx) + if acceptErr != nil { + log.Print("error accepting client: ", acceptErr) + return + } + + err = serve(conn, acceptParams, pools) if err != nil && !errors.Is(err, io.EOF) { log.Print("error serving client: ", err) + return } }() }