github.com/nginxinc/kubernetes-ingress@v1.12.5/tests/test-servers/udp/main.go (about)

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"log"
     7  	"net"
     8  	"os"
     9  )
    10  
    11  func main() {
    12  	ip := os.Getenv("POD_IP")
    13  	log.Printf("ip: %v\n", ip)
    14  	if ip == "" {
    15  		log.Fatalf("missing required env var: POD_IP")
    16  	}
    17  	port := flag.String("port", "3334", "The port the server listens to")
    18  	flag.Parse()
    19  	listener, err := net.ListenPacket("udp", fmt.Sprintf(":%v", *port))
    20  	if err != nil {
    21  		log.Panicln(err)
    22  	}
    23  	defer listener.Close()
    24  	log.Printf("listening to udp connections at: :%v", *port)
    25  	buffer := make([]byte, 1024)
    26  	for {
    27  		n, addr, err := listener.ReadFrom(buffer)
    28  		if err != nil {
    29  			log.Panicln(err)
    30  		}
    31  
    32  		request := string(buffer[:n])
    33  
    34  		log.Printf("packet-received: request=%q bytes=%d from=%s", request, n, addr.String())
    35  
    36  		response := fmt.Sprintf("%v:%v", ip, *port)
    37  		if request == "health" {
    38  			response = "healthy"
    39  		}
    40  
    41  		log.Printf("write data to connection: %q", response)
    42  		n, err = listener.WriteTo([]byte(response), addr)
    43  		if err != nil {
    44  			log.Panicln(err)
    45  		}
    46  		log.Printf("packet-written: bytes=%d to=%s", n, addr.String())
    47  	}
    48  }