github.com/nginxinc/kubernetes-ingress@v1.12.5/tests/test-servers/tcp/main.go (about) 1 package main 2 3 import ( 4 "flag" 5 "fmt" 6 "log" 7 "net" 8 ) 9 10 func main() { 11 port := flag.String("port", "3333", "Port") 12 flag.Parse() 13 14 l, err := net.Listen("tcp", fmt.Sprintf(":%v", *port)) 15 if err != nil { 16 log.Panicln(err) 17 } 18 defer l.Close() 19 log.Printf("listening to tcp connections at: :%v\n", *port) 20 21 for { 22 conn, err := l.Accept() 23 if err != nil { 24 log.Panicln(err) 25 } 26 27 go handleRequest(conn) 28 } 29 } 30 31 func handleRequest(conn net.Conn) { 32 log.Println("accepted new connection") 33 34 buf := make([]byte, 1024) 35 n, err := conn.Read(buf) 36 if err != nil { 37 log.Println("Error reading:", err.Error()) 38 conn.Close() 39 return 40 } 41 instruction := string(buf[:n]) 42 log.Printf("instruction:%q\n", instruction) 43 if instruction != "hold" { 44 defer conn.Close() 45 defer log.Println("closed connection") 46 } 47 48 response := conn.LocalAddr().String() 49 if instruction == "health" { 50 response = "healthy" 51 } 52 53 log.Printf("write data to connection: %v\n", response) 54 55 _, err = conn.Write([]byte(response)) 56 if err != nil { 57 log.Printf("error writing to connection: %v", err) 58 return 59 } 60 }