(ctx context.Context, logger slog.Logger, handler http.Handler, addr, name string)
| 565 | } |
| 566 | |
| 567 | func ServeHandler(ctx context.Context, logger slog.Logger, handler http.Handler, addr, name string) (closeFunc func()) { |
| 568 | // ReadHeaderTimeout is purposefully not enabled. It caused some issues with |
| 569 | // websockets over the dev tunnel. |
| 570 | // See: https://github.com/coder/coder/pull/3730 |
| 571 | //nolint:gosec |
| 572 | srv := &http.Server{ |
| 573 | Addr: addr, |
| 574 | Handler: handler, |
| 575 | } |
| 576 | go func() { |
| 577 | ln, err := net.Listen("tcp", addr) |
| 578 | if err != nil { |
| 579 | logger.Error(ctx, "http server listen", slog.F("name", name), slog.F("addr", addr), slog.Error(err)) |
| 580 | return |
| 581 | } |
| 582 | defer ln.Close() |
| 583 | logger.Info(ctx, "http server listening", slog.F("addr", ln.Addr()), slog.F("name", name)) |
| 584 | if err := srv.Serve(ln); err != nil && !xerrors.Is(err, http.ErrServerClosed) { |
| 585 | logger.Error(ctx, "http server serve", slog.F("addr", ln.Addr()), slog.F("name", name), slog.Error(err)) |
| 586 | } |
| 587 | }() |
| 588 | |
| 589 | return func() { |
| 590 | _ = srv.Close() |
| 591 | } |
| 592 | } |
| 593 | |
| 594 | // extractPort handles different url strings. |
| 595 | // - localhost:6060 |
no test coverage detected