@@ -209,6 +209,11 @@ func (c *Connection) runtimeErrorHandler(scope string) GoErrorHandler {
209209 )
210210}
211211
212+ func (c * Connection ) closeWithError (err error ) error {
213+ Connections .remove (c .SessionID , err )
214+ return err
215+ }
216+
212217func (c * Connection ) runReceiveLoop () error {
213218 for c .IsAlive () {
214219 select {
@@ -285,25 +290,31 @@ func (c *Connection) Handler(ctx context.Context, conn *cryptostream.Conn) error
285290 var err error
286291 _ , length , err := c .Parser .ReadHeader (conn )
287292 if err != nil {
288- return fmt .Errorf ("error reading header:%s %w" , conn .RemoteAddr (), err )
293+ return c . closeWithError ( fmt .Errorf ("error reading header:%s %w" , conn .RemoteAddr (), err ) )
289294 }
290295 GoGuarded ("connection-send-call:" + c .SessionID , func () error {
291296 return c .Send (ctx , conn )
292297 }, c .runtimeErrorHandler ("send call" ))
293298
294- return c .buildResponse (conn , length )
299+ if err := c .buildResponse (conn , length ); err != nil {
300+ return c .closeWithError (err )
301+ }
302+ return nil
295303}
296304
297305func (c * Connection ) HandlerSimplex (ctx context.Context , conn * cryptostream.Conn ) error {
298306 var err error
299307 _ , length , err := c .Parser .ReadHeader (conn )
300308 if err != nil {
301- return fmt .Errorf ("error reading header:%s %w" , conn .RemoteAddr (), err )
309+ return c . closeWithError ( fmt .Errorf ("error reading header:%s %w" , conn .RemoteAddr (), err ) )
302310 }
303311 if err := c .Send (ctx , conn ); err != nil {
304- return err
312+ return c .closeWithError (err )
313+ }
314+ if err := c .buildResponse (conn , length ); err != nil {
315+ return c .closeWithError (err )
305316 }
306- return c . buildResponse ( conn , length )
317+ return nil
307318}
308319
309320type connections struct {
0 commit comments