func()

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]
			}
		}
	}
}