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() {