From 4855742c45103239e2079dd2a7ed2549c863cf9c Mon Sep 17 00:00:00 2001 From: Van Huynh Date: Fri, 16 Oct 2020 01:41:24 -0700 Subject: [PATCH] close socket when the connection is closed (#2) Close socket when the connection is closed --- src/lsquic/client.cr | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/lsquic/client.cr b/src/lsquic/client.cr index 4d8d6b6..b99f3db 100644 --- a/src/lsquic/client.cr +++ b/src/lsquic/client.cr @@ -213,17 +213,24 @@ module QUIC end @engine_open = false LibLsquic.engine_destroy(engine) + @socket.try &.close + @socket = nil end - buffer = Bytes.new(0x600) - loop do - bytes_read = socket.read buffer - break if !@engine_open - LibLsquic.engine_packet_in(engine, buffer[0, bytes_read], bytes_read, socket.local_address, socket.remote_address, Box.box(socket), 0) if bytes_read != 0 - LibLsquic.engine_process_conns(engine) + begin + buffer = Bytes.new(0x600) + loop do + bytes_read = socket.read buffer + break if !@engine_open + LibLsquic.engine_packet_in(engine, buffer[0, bytes_read], bytes_read, socket.local_address, socket.remote_address, Box.box(socket), 0) if bytes_read != 0 + LibLsquic.engine_process_conns(engine) + end + rescue IO::Error + # may have already been closed + ensure + @socket.try &.close + @socket = nil end - @socket.try &.close - @socket = nil end def socket : UDPSocket