@@ -2,6 +2,7 @@ package service
22
33import (
44 "crypto/tls"
5+ "errors"
56 "fmt"
67 "log"
78 "log/slog"
@@ -10,6 +11,7 @@ import (
1011 "mkBlog/pkg/router"
1112 tlscert "mkBlog/pkg/tls_cert"
1213 "mkBlog/service/api"
14+ "net"
1315 "net/http"
1416 _ "net/http/pprof"
1517 "os"
@@ -76,17 +78,22 @@ func NewBlogService() (*BlogService, error) {
7678 return & service , nil
7779}
7880
79- func (s * BlogService ) Start () {
81+ func (s * BlogService ) Start () error {
8082 if config .Cfg .Server .Devmode {
8183 go func () {
8284 log .Println (http .ListenAndServe (":6060" , nil ))
8385 }()
8486 }
87+ addr := ":" + fmt .Sprint (config .Cfg .Server .Port )
8588 if config .Cfg .Server .HTTP3Enabled {
8689 tlscert .LoadCert ()
90+ conn , err := net .ListenPacket ("udp" , addr )
91+ if err != nil {
92+ return fmt .Errorf ("start HTTP3 server: %w" , err )
93+ }
8794 srv := http3.Server {
8895 Handler : router .GetRouter (),
89- Addr : ":" + fmt . Sprint ( config . Cfg . Server . Port ) ,
96+ Addr : addr ,
9097 TLSConfig : http3 .ConfigureTLSConfig (& tls.Config {
9198 MinVersion : tls .VersionTLS13 ,
9299 GetCertificate : tlscert .GetCurrentCert ,
@@ -95,7 +102,7 @@ func (s *BlogService) Start() {
95102 }
96103 slog .Info ("starting HTTP3 server" , "port" , config .Cfg .Server .Port )
97104 go func () {
98- if err := srv .ListenAndServe ( ); err != nil {
105+ if err := srv .Serve ( conn ); err != nil && ! errors . Is ( err , http . ErrServerClosed ) {
99106 slog .Error ("failed to start HTTP3 server" , "error" , err )
100107 }
101108 }()
@@ -108,20 +115,23 @@ func (s *BlogService) Start() {
108115 if config .Cfg .TLS .Enabled {
109116 tlscert .LoadCert ()
110117 srv := & http.Server {
111- Addr : ":" + fmt . Sprint ( config . Cfg . Server . Port ) ,
118+ Addr : addr ,
112119 Handler : router .GetRouter (),
113120 TLSConfig : & tls.Config {
114121 MinVersion : tls .VersionTLS12 ,
115122 GetCertificate : tlscert .GetCurrentCert ,
116123 },
117124 }
118125 // Start HTTPS server
119- if err := srv .ListenAndServeTLS ("" , "" ); err != nil {
126+ if err := srv .ListenAndServeTLS ("" , "" ); err != nil && ! errors . Is ( err , http . ErrServerClosed ) {
120127 slog .Error ("failed to start HTTPS server" , "error" , err )
128+ return fmt .Errorf ("start HTTPS server: %w" , err )
121129 }
122130 } else {
123- if err := router .GetRouter ().Run (":" + fmt . Sprint ( config . Cfg . Server . Port ) ); err != nil {
131+ if err := router .GetRouter ().Run (addr ); err != nil {
124132 slog .Error ("failed to start HTTP server" , "error" , err )
133+ return fmt .Errorf ("start HTTP server: %w" , err )
125134 }
126135 }
136+ return nil
127137}
0 commit comments