update
All checks were successful
Build and Publish / BuildAndDeployAmd64 (push) Successful in 29s
Build and Publish / BuildAndDeploy (push) Successful in 2m34s

This commit is contained in:
matst80
2024-11-21 22:41:49 +01:00
parent c17a8a4219
commit 9b137e2ff1

View File

@@ -1,8 +1,10 @@
package main package main
import ( import (
"bufio"
"encoding/binary" "encoding/binary"
"fmt" "fmt"
"io"
"log" "log"
"net" "net"
"time" "time"
@@ -130,6 +132,7 @@ func WaitForFrame(conn net.Conn, resultChan chan<- FrameWithPayload) error {
payload := make([]byte, frame.Length) payload := make([]byte, frame.Length)
_, err = conn.Read(payload) _, err = conn.Read(payload)
if err != nil { if err != nil {
conn.Close()
return err return err
} }
resultChan <- FrameWithPayload{ resultChan <- FrameWithPayload{
@@ -169,21 +172,28 @@ func (c *Connection) Listen() (*GenericListener, error) {
} }
const ( const (
MaxCallDuration = 900 * time.Millisecond MaxCallDuration = 300 * time.Millisecond
ListenerKeepalive = 5 * time.Second ListenerKeepalive = 5 * time.Second
) )
func (l *GenericListener) HandleConnection(conn net.Conn) { func (l *GenericListener) HandleConnection(conn net.Conn) {
for !l.StopListener { var err error
ch := make(chan FrameWithPayload, 1) var frame Frame
//conn.SetReadDeadline(time.Now().Add(MaxCallDuration)) b := bufio.NewReader(conn)
go WaitForFrame(conn, ch) for err != io.EOF {
frame := <-ch
err := l.HandleFrame(conn, &frame)
if err != nil {
log.Fatalf("Error in handler: %v\n", err)
}
err = binary.Read(b, binary.LittleEndian, &frame)
if err == nil && frame.IsValid() {
payload := make([]byte, frame.Length)
_, err = b.Read(payload)
if err == nil {
err = l.HandleFrame(conn, &FrameWithPayload{
Frame: frame,
Payload: payload,
})
}
}
} }
} }