leaky-pool/server/main.go

54 lines
1.2 KiB
Go
Raw Normal View History

2023-02-27 06:04:26 +00:00
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)
}
}