func ServerSocket() { addr, err := net.ResolveTCPAddr("tcp", config.Listen_addr) if err != nil { log.Fatalf("error parse address %s: %s", config.Listen_addr, err.Error()) } s, err := net.ListenTCP("tcp", addr) if err != nil { log.Fatalf("error listening on %s: %s", config.Listen_addr, err.Error()) } log.Infof("Server listened on %s", config.Listen_addr) for { conn, err := s.AcceptTCP() if err != nil { log.Warnf("listen_socket: error when accepting: %s", err.Error()) continue } go func(conn *WrapedSocket) { event := new(PostAcceptEvent) event.RemoteAddr = conn.RemoteAddr().(*net.TCPAddr) event.connID = conn.Id() PostAccept(event) if event.Rejected() { conn.Warnf("connection rejected.") conn.Close() return } log.Infof("connection accepted.") ClientSocket(conn, event) }(WrapClientSocket(conn)) } }
func confInit() { content, err := ioutil.ReadFile(config_file) if err != nil { log.Fatalf("unable to load config %s: %s", config_file, err.Error()) } err = yaml.Unmarshal(content, &config) if err != nil { log.Fatalf("error when parsing config file %s: %s", config_file, err.Error()) } validateConfig() if config.Log.Target != "" && config.Log.Target != "-" { config.Log.Target, _ = filepath.Abs(config.Log.Target) log.Info("log path: " + config.Log.Target) } log.Stop() if config.Daemonize { Daemonize() } log.Start() if config.Log.Level != "" { level := log.ToLevel(config.Log.Level) if level == log.INVALID { log.Errorf("Invalid log level %s", config.Log.Level) } else { log.SetLogLevel(level) } } if config.Log.Target != "" && config.Log.Target != "-" { err := log.Open(config.Log.Target) if err != nil { log.Fatalf("Unable to open log %s: %s", config.Log.Target, err.Error()) } } log.Info("config loaded.") log.Info("server listen on: " + config.Listen_addr) log.Infof("%d upstream server(s) found", len(config.Upstream)) }
func (event *NetworkEvent) Fatalf(format string, v ...interface{}) { if event.log_prefix == "" { event.log_prefix = fmt.Sprintf("[#%d %s]", event.connID, event.RemoteAddr) } log.Fatalf(event.log_prefix+format, v...) }
func (ws *WrapedSocket) Fatalf(format string, v ...interface{}) { log.Fatalf(ws.log_prefix+format, v...) }