package main import ( "log" "net" "time" ) func main() { listenerAddr, err := net.ResolveTCPAddr("tcp4", ":6699") if err != nil { log.Fatalf("could not resolve listenAddr: %v", err) } listener, err := net.ListenTCP("tcp", listenerAddr) if err != nil { log.Fatalf("could not listen on address '%s': %v", listenerAddr.String(), err) } for { conn, err := listener.Accept() if err != nil { log.Printf("failed to accept new incoming connection: %v", err) // if logging facility has latency this will block continue } go connHandler(conn) // branch off into goroutine so we're not blocking } } func connHandler(conn net.Conn) { log.Printf("accepted new connection from: %s", conn.RemoteAddr().String()) conn.SetReadDeadline(time.Now().Add(time.Second)) for { buf := make([]byte, 128) bytesRead, err := conn.Read(buf) if err == nil && bytesRead > 0 { log.Printf("Incoming message over socket '%s': %s", conn.RemoteAddr().String(), string(buf)) } _, err = conn.Write([]byte("1")) if err != nil { log.Printf("failed writing to connection '%s': %v", conn.RemoteAddr().String(), err) conn.Close() break } time.Sleep(time.Second) } }