From 716962672fa215d65d39d4ecb3b4f9470cf3bdb8 Mon Sep 17 00:00:00 2001 From: astaxie Date: Mon, 3 Nov 2014 15:06:25 +0800 Subject: [PATCH] fix #751 add config ListenTCP4 when user want to listen on the TCP4, because now almost use the ipv4. but default lister on the ipv6 --- app.go | 36 ++++++++++++++++++++++++------------ config.go | 5 +++++ filter.go | 5 +++++ 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/app.go b/app.go index 0b89d89e..d155c531 100644 --- a/app.go +++ b/app.go @@ -20,13 +20,8 @@ import ( "net/http" "net/http/fcgi" "time" - - "github.com/astaxie/beego/context" ) -// FilterFunc defines filter function type. -type FilterFunc func(*context.Context) - // App defines beego application with a new PatternServeMux. type App struct { Handlers *ControllerRegistor @@ -85,7 +80,7 @@ func (app *App) Run() { if HttpsPort != 0 { app.Server.Addr = fmt.Sprintf("%s:%d", HttpAddr, HttpsPort) } - BeeLogger.Info("Running on %s", app.Server.Addr) + BeeLogger.Info("https server Running on %s", app.Server.Addr) err := app.Server.ListenAndServeTLS(HttpCertFile, HttpKeyFile) if err != nil { BeeLogger.Critical("ListenAndServeTLS: ", err) @@ -98,12 +93,29 @@ func (app *App) Run() { if EnableHttpListen { go func() { app.Server.Addr = addr - BeeLogger.Info("Running on %s", app.Server.Addr) - err := app.Server.ListenAndServe() - if err != nil { - BeeLogger.Critical("ListenAndServe: ", err) - time.Sleep(100 * time.Microsecond) - endRunning <- true + BeeLogger.Info("http server Running on %s", app.Server.Addr) + if ListenTCP4 && HttpAddr == "" { + ln, err := net.Listen("tcp4", app.Server.Addr) + if err != nil { + BeeLogger.Critical("ListenAndServe: ", err) + time.Sleep(100 * time.Microsecond) + endRunning <- true + return + } + err = app.Server.Serve(ln) + if err != nil { + BeeLogger.Critical("ListenAndServe: ", err) + time.Sleep(100 * time.Microsecond) + endRunning <- true + return + } + } else { + err := app.Server.ListenAndServe() + if err != nil { + BeeLogger.Critical("ListenAndServe: ", err) + time.Sleep(100 * time.Microsecond) + endRunning <- true + } } }() } diff --git a/config.go b/config.go index fd3d5de1..ed91647f 100644 --- a/config.go +++ b/config.go @@ -40,6 +40,7 @@ var ( EnableHttpListen bool HttpAddr string HttpPort int + ListenTCP4 bool EnableHttpTLS bool HttpsPort int HttpCertFile string @@ -309,6 +310,10 @@ func ParseConfig() (err error) { HttpPort = v } + if v, err := AppConfig.Bool("ListenTCP4"); err == nil { + ListenTCP4 = v + } + if v, err := AppConfig.Bool("EnableHttpListen"); err == nil { EnableHttpListen = v } diff --git a/filter.go b/filter.go index eebad329..ddd61094 100644 --- a/filter.go +++ b/filter.go @@ -14,6 +14,11 @@ package beego +import "github.com/astaxie/beego/context" + +// FilterFunc defines filter function type. +type FilterFunc func(*context.Context) + // FilterRouter defines filter operation before controller handler execution. // it can match patterned url and do filter function when action arrives. type FilterRouter struct {