From e1cf7187df8f4adf27d6a54a17b6f36fc74beb01 Mon Sep 17 00:00:00 2001 From: "Alexander \"Arav\" Andreev" Date: Sat, 12 Aug 2023 23:53:26 +0400 Subject: [PATCH] Replaced HTTP server code with a newest one. --- cmd/dwelling-home/main.go | 23 +---------------------- internal/http/server.go | 29 +++++++++++++++++++++++++++-- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/cmd/dwelling-home/main.go b/cmd/dwelling-home/main.go index e0aadfd..cdecc1e 100644 --- a/cmd/dwelling-home/main.go +++ b/cmd/dwelling-home/main.go @@ -5,11 +5,9 @@ import ( "fmt" "log" "net/http" - "net/netip" "os" "os/signal" "path" - "strings" "syscall" "time" @@ -39,25 +37,6 @@ func main() { log.SetFlags(log.Llongfile) - var network string - if !strings.ContainsRune(*listenAddress, ':') { - network = "unix" - defer os.Remove(*listenAddress) - } else { - ap, err := netip.ParseAddrPort(*listenAddress) - if err != nil { - log.Fatalln(err) - } else if !ap.IsValid() { - log.Fatalln(*listenAddress, "is not valid") - } - - if ap.Addr().Is4() { - network = "tcp4" - } else if ap.Addr().Is6() { - network = "tcp6" - } - } - guestbookDB, err := gb.NewSQLiteDB(path.Join(*databasesPath, "guestbook.sqlite")) if err != nil { log.Fatalln(err) @@ -123,7 +102,7 @@ func main() { srv := dwhttp.NewHttpServer(r) - if err := srv.Start(network, *listenAddress); err != nil { + if err := srv.Start(*listenAddress); err != nil { log.Fatalln(err) } defer func() { diff --git a/internal/http/server.go b/internal/http/server.go index 7a82e8b..477e662 100644 --- a/internal/http/server.go +++ b/internal/http/server.go @@ -5,12 +5,15 @@ import ( "log" "net" "net/http" + "net/netip" "os" + "strings" "time" ) type HttpServer struct { - s http.Server + s http.Server + addr net.Addr } func NewHttpServer(r http.Handler) *HttpServer { @@ -20,7 +23,23 @@ func NewHttpServer(r http.Handler) *HttpServer { Handler: r}} } -func (s *HttpServer) Start(network, address string) error { +func (s *HttpServer) Start(address string) error { + var network string + if !strings.ContainsRune(address, ':') { + network = "unix" + } else { + ap, err := netip.ParseAddrPort(address) + if err != nil { + return err + } + + if ap.Addr().Is4() { + network = "tcp4" + } else if ap.Addr().Is6() { + network = "tcp6" + } + } + listener, err := net.Listen(network, address) if err != nil { return err @@ -30,6 +49,8 @@ func (s *HttpServer) Start(network, address string) error { os.Chmod(address, 0777) } + s.addr = listener.Addr() + go func() { if err = s.s.Serve(listener); err != nil && err != http.ErrServerClosed { log.Fatalln(err) @@ -43,6 +64,10 @@ func (s *HttpServer) Stop() error { ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() + if s.addr.Network() == "unix" { + defer os.Remove(s.addr.String()) + } + if err := s.s.Shutdown(ctx); err != nil { return err }