コード例 #1
0
ファイル: serverBase.go プロジェクト: optimuse/spig
func listener(name string, port int, fn workers.WorkerFunc) {
	//fmt.Printf("name = %s; port = %d\n",name,port)
	laddr := fmt.Sprintf("0.0.0.0:%d", port)
	addr, e := net.ResolveTCPAddr("tcp", laddr)
	if e != nil {
		fmt.Printf("Cannot resolve address %s\n", laddr)
		os.Exit(1)
	}
	socket, e := net.ListenTCP("tcp", addr)
	if e != nil {
		fmt.Printf("Failed to listen on address %s\n", laddr)
		os.Exit(2)
	}
	fmt.Printf("%s server listening on port %d\n", name, port)

	log := utils.NewLog(name)
	for {
		conn, e := socket.AcceptTCP()
		if e != nil {
			fmt.Printf("Accept failed on address %s\n", laddr)
			//break
			time.Sleep(60000000000) // 30 min
		}
		log.Printf("Connected to remote address %s", conn.RemoteAddr())
		go fn(name, conn)
	}

}
コード例 #2
0
ファイル: serverBase.go プロジェクト: optimuse/spig
func Start() {
	var p = flag.Int("p", 8000, "base port")
	var help = flag.Bool("h", false, "help")
	flag.Parse()
	if *help || flag.NArg() != 0 {
		fmt.Printf("Usage: server\n")
		flag.PrintDefaults()
		return
	}

	log := utils.NewLog("server")
	log.Printf("Server started.")
	utils.Version()
	workers.Apply(listener, *p)
	for {
		fmt.Printf("++++ %s\n", time.Now().Local().Format(time.UnixDate))
		time.Sleep(1800000000000) // 30 min
	}
}