92
92
Renderer Renderer
93
93
Logger Logger
94
94
IPExtractor IPExtractor
95
+ ListenerNetwork string
95
96
}
96
97
97
98
// Route contains a handler and information for matching against requests.
@@ -281,6 +282,7 @@ var (
281
282
ErrInvalidRedirectCode = errors .New ("invalid redirect status code" )
282
283
ErrCookieNotFound = errors .New ("cookie not found" )
283
284
ErrInvalidCertOrKeyType = errors .New ("invalid cert or key type, must be string or []byte" )
285
+ ErrInvalidListenerNetwork = errors .New ("invalid listener network" )
284
286
)
285
287
286
288
// Error handlers
@@ -302,9 +304,10 @@ func New() (e *Echo) {
302
304
AutoTLSManager : autocert.Manager {
303
305
Prompt : autocert .AcceptTOS ,
304
306
},
305
- Logger : log .New ("echo" ),
306
- colorer : color .New (),
307
- maxParam : new (int ),
307
+ Logger : log .New ("echo" ),
308
+ colorer : color .New (),
309
+ maxParam : new (int ),
310
+ ListenerNetwork : "tcp" ,
308
311
}
309
312
e .Server .Handler = e
310
313
e .TLSServer .Handler = e
@@ -712,7 +715,7 @@ func (e *Echo) StartServer(s *http.Server) (err error) {
712
715
713
716
if s .TLSConfig == nil {
714
717
if e .Listener == nil {
715
- e .Listener , err = newListener (s .Addr )
718
+ e .Listener , err = newListener (s .Addr , e . ListenerNetwork )
716
719
if err != nil {
717
720
return err
718
721
}
@@ -723,7 +726,7 @@ func (e *Echo) StartServer(s *http.Server) (err error) {
723
726
return s .Serve (e .Listener )
724
727
}
725
728
if e .TLSListener == nil {
726
- l , err := newListener (s .Addr )
729
+ l , err := newListener (s .Addr , e . ListenerNetwork )
727
730
if err != nil {
728
731
return err
729
732
}
@@ -752,7 +755,7 @@ func (e *Echo) StartH2CServer(address string, h2s *http2.Server) (err error) {
752
755
}
753
756
754
757
if e .Listener == nil {
755
- e .Listener , err = newListener (s .Addr )
758
+ e .Listener , err = newListener (s .Addr , e . ListenerNetwork )
756
759
if err != nil {
757
760
return err
758
761
}
@@ -873,8 +876,11 @@ func (ln tcpKeepAliveListener) Accept() (c net.Conn, err error) {
873
876
return
874
877
}
875
878
876
- func newListener (address string ) (* tcpKeepAliveListener , error ) {
877
- l , err := net .Listen ("tcp" , address )
879
+ func newListener (address , network string ) (* tcpKeepAliveListener , error ) {
880
+ if network != "tcp" && network != "tcp4" && network != "tcp6" {
881
+ return nil , ErrInvalidListenerNetwork
882
+ }
883
+ l , err := net .Listen (network , address )
878
884
if err != nil {
879
885
return nil , err
880
886
}
0 commit comments