Skip to content

Instantly share code, notes, and snippets.

@unicolet
Last active October 29, 2024 12:42
Show Gist options
  • Save unicolet/14457e13f03b891a90328053e4fb4ebe to your computer and use it in GitHub Desktop.
Save unicolet/14457e13f03b891a90328053e4fb4ebe to your computer and use it in GitHub Desktop.
package main
import (
"bufio"
"fmt"
"io"
"log"
"net"
"time"
)
func main() {
log.SetFlags(log.LstdFlags | log.Lmicroseconds)
listener, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatalf("Failed to listen: %v", err)
}
defer listener.Close()
log.Printf("TCP Echo Server listening on :8080 at epoch ms: %d", time.Now().UnixMilli())
for {
conn, err := listener.Accept()
if err != nil {
log.Printf("Failed to accept connection: %v", err)
continue
}
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
defer conn.Close()
remoteAddr := conn.RemoteAddr().String()
log.Printf("New connection from %s at epoch ms: %d", remoteAddr, time.Now().UnixMilli())
reader := bufio.NewReader(conn)
for {
data, err := reader.ReadString('\n')
if err != nil {
if err != io.EOF {
log.Printf("Error reading from connection: %v", err)
}
return
}
nowMs := time.Now().UnixMilli()
fmt.Printf("[%d] From %s: %s", nowMs, remoteAddr, data)
_, err = conn.Write([]byte(data))
if err != nil {
log.Printf("Error writing to connection: %v", err)
return
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment