From 3a1b74ce2dfb1ea092b33640ea3be36e5ef81e72 Mon Sep 17 00:00:00 2001 From: Nonoo Date: Sun, 8 Nov 2020 16:57:22 +0100 Subject: [PATCH] Close the TCP serial server client connection when there's an error --- serialtcpsrv.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/serialtcpsrv.go b/serialtcpsrv.go index d7914f5..dcbcce2 100644 --- a/serialtcpsrv.go +++ b/serialtcpsrv.go @@ -90,7 +90,17 @@ func (s *serialTCPSrvStruct) clientLoop() { writeErrChan := make(chan error) go s.writeLoop(writeLoopDeinitNeededChan, writeLoopDeinitFinishedChan, writeErrChan) -connected: + defer func() { + s.client.Close() + log.Print("client ", s.client.RemoteAddr().String(), " disconnected") + + writeLoopDeinitNeededChan <- true + <-writeLoopDeinitFinishedChan + + <-s.clientLoopDeinitNeededChan + s.clientLoopDeinitFinishedChan <- true + }() + for { b := make([]byte, maxSerialFrameLength) n, err := s.client.Read(b) @@ -101,7 +111,7 @@ connected: select { case s.fromClient <- b[:n]: case <-writeErrChan: - break connected + return case <-s.clientLoopDeinitNeededChan: writeLoopDeinitNeededChan <- true <-writeLoopDeinitFinishedChan @@ -110,14 +120,6 @@ connected: return } } - - log.Print("client ", s.client.RemoteAddr().String(), " disconnected") - - writeLoopDeinitNeededChan <- true - <-writeLoopDeinitFinishedChan - - <-s.clientLoopDeinitNeededChan - s.clientLoopDeinitFinishedChan <- true } func (s *serialTCPSrvStruct) loop() {