/
cloudservices
/
common
Обзор
Документация
Войти
/
cloudservices
/
common
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
http.go
62 строки
1 KB
Ivan
fix tls config
26 июл 2026, 15:32
26 июл 2026, 15:32
c8828ec
Код
Авторство
О чём код?
package common import ( "context" "crypto/tls" "fmt" "net/http" "time" ) type HTTPServer struct { raw *http.Server } func NewHTTPServer(addr string, tlsConfig *tls.Config, handler http.Handler) *HTTPServer { return &HTTPServer{ raw: &http.Server{ Addr: addr, Handler: handler, TLSConfig: tlsConfig, ReadTimeout: 30 * time.Second, ReadHeaderTimeout: 10 * time.Second, WriteTimeout: 30 * time.Second, IdleTimeout: 5 * time.Minute, MaxHeaderBytes: 1024 * 8, }, } } func (server *HTTPServer) Raw() *http.Server { return server.raw } func (server *HTTPServer) Run(ctx context.Context) error { errCh := make(chan error, 1) go func() { defer close(errCh) var err error if server.raw.TLSConfig != nil { err = server.raw.ListenAndServeTLS("", "") } else { err = server.raw.ListenAndServe() } if err != nil && err != http.ErrServerClosed { errCh <- fmt.Errorf("http server error: %w", err) } }() select { case err := <-errCh: return err case <-ctx.Done(): shutdownCtx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() return server.raw.Shutdown(shutdownCtx) } }