in src/tcp/tcpserver.go [94:131]
func (s *SocketsServer) handleConnection(conn net.Conn) {
defer conn.Close()
log.Println(fmt.Sprintf("%s: accepted connection", s.Port))
buf := make([]byte, 2048)
ReadLoop:
for {
select {
case <-s.ctx.Done():
return
default:
conn.SetDeadline(time.Now().Add(100 * time.Millisecond))
for {
n, err := conn.Read(buf)
if err != nil {
if opErr, ok := err.(*net.OpError); ok && opErr.Timeout() {
continue ReadLoop
} else if err != io.EOF {
log.Println("Error reading from TCP connection", err)
return
} else {
log.Println("Client closed connection")
return
}
}
if n == 0 {
continue ReadLoop
}
s.StreamDataChan <- buf[:n]
}
}
}
}