From f4698acfd5a53f123d02234360298c987b45fba5 Mon Sep 17 00:00:00 2001 From: matst80 Date: Tue, 12 Nov 2024 16:02:58 +0100 Subject: [PATCH] close connection more often --- cart-packet-queue.go | 13 ++++++++++++- packet-queue.go | 18 ++++++++++++++---- tcp-mux-server.go | 1 + 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/cart-packet-queue.go b/cart-packet-queue.go index b466aeb..0daf92f 100644 --- a/cart-packet-queue.go +++ b/cart-packet-queue.go @@ -26,8 +26,19 @@ func NewCartPacketQueue(connection net.Conn) *CartPacketQueue { return queue } -func (p *CartPacketQueue) HandleConnection(connection net.Conn) error { +func (p *CartPacketQueue) RemoveListeners() { + p.mu.Lock() + defer p.mu.Unlock() + for _, l := range p.expectedPackages { + for _, l := range *l { + close(l.Chan) + } + } + p.expectedPackages = make(map[uint32]*CartListener) +} +func (p *CartPacketQueue) HandleConnection(connection net.Conn) error { + defer p.RemoveListeners() defer connection.Close() var packet CartPacket reader := bufio.NewReader(connection) diff --git a/packet-queue.go b/packet-queue.go index e1fa4a1..e9ebc26 100644 --- a/packet-queue.go +++ b/packet-queue.go @@ -2,6 +2,7 @@ package main import ( "bufio" + "fmt" "io" "log" "net" @@ -31,9 +32,18 @@ func NewPacketQueue(connection net.Conn) *PacketQueue { return queue } -func (p *PacketQueue) HandleConnection(connection net.Conn) error { +func (p *PacketQueue) RemoveListeners() { + p.mu.Lock() + defer p.mu.Unlock() + for _, l := range p.expectedPackages { + close(l.Chan) + } + p.expectedPackages = make(map[uint32]*Listener) +} +func (p *PacketQueue) HandleConnection(connection net.Conn) error { defer connection.Close() + defer p.RemoveListeners() var packet Packet reader := bufio.NewReader(connection) for { @@ -46,8 +56,8 @@ func (p *PacketQueue) HandleConnection(connection net.Conn) error { return err } if packet.Version != CurrentPacketVersion { - log.Printf("Error receiving packet: %v\n", err) - continue + log.Printf("Error receiving packet: %v\n", packet.Version) + return fmt.Errorf("incorrect packet version: %d", packet.Version) } if packet.DataLength == 0 { go p.HandleData(packet.MessageType, CallResult{ @@ -59,7 +69,7 @@ func (p *PacketQueue) HandleConnection(connection net.Conn) error { data, err := GetPacketData(reader, packet.DataLength) if err != nil { log.Printf("Error receiving packet data: %v\n", err) - //return err + return err } else { go p.HandleData(packet.MessageType, CallResult{ StatusCode: packet.StatusCode, diff --git a/tcp-mux-server.go b/tcp-mux-server.go index 895fd77..d2077b4 100644 --- a/tcp-mux-server.go +++ b/tcp-mux-server.go @@ -118,6 +118,7 @@ func (m *TCPServerMux) HandleConnection(connection net.Conn) error { data, err := GetPacketData(reader, packet.DataLength) if err != nil { log.Printf("Error receiving packet data: %v\n", err) + return err } go m.HandleData(connection, packet.MessageType, data) }