package main import ( "bufio" "fmt" "log" "net" "strings" "time" ) func echo(c net.Conn, shout string, t time.Duration) { for _ = range 3 { fmt.Fprintln(c, "\t", strings.ToUpper(shout)) time.Sleep(t) } } func handleConn(conn net.Conn) { count := 1 defer fmt.Println("CLosed Connection") defer conn.Close() fmt.Println("Accepted connection") ticker := time.NewTicker(2*time.Second) input := bufio.NewScanner(conn) select { case <- ticker.C: fmt.Println("TIMEOUT") default: fmt.Println("DEFAULT") } for input.Scan() { fmt.Println("TICK") switch input.Text() { case "info": fmt.Printf("INFO %d",count) default: count++ go func() { defer func (){ count-- }() echo(conn, input.Text(), 1*time.Second) }() } } } func main() { listener, err := net.Listen("tcp", ":9090") if err != nil { log.Fatalf("Error %v", err) } for { conn, err := listener.Accept() if err != nil { log.Fatalf("Error in Accept %s", err) } go handleConn(conn) } }