17
17
LOG = logging .getLogger (__name__ )
18
18
19
19
BUFFER_SIZE = 2 ** 10 # 1024
20
+ TLS_BUFFER_SIZE = 16384 # 16 KB, max TLS record size
20
21
21
22
PortOrUrl = Union [str , int ]
22
23
@@ -140,7 +141,7 @@ def _handle_socket(self, source_socket: ssl.SSLSocket, client_address: str) -> N
140
141
s_read , _ , _ = select .select (sockets , [], [])
141
142
142
143
for s in s_read :
143
- data = s .recv (BUFFER_SIZE )
144
+ data = s .recv (TLS_BUFFER_SIZE )
144
145
if not data :
145
146
return
146
147
@@ -152,6 +153,9 @@ def _handle_socket(self, source_socket: ssl.SSLSocket, client_address: str) -> N
152
153
LOG .warning (
153
154
"Error while proxying SSL request: %s" , e , exc_info = LOG .isEnabledFor (logging .DEBUG )
154
155
)
156
+ finally :
157
+ source_socket .close ()
158
+ LOG .debug ("Connection finished!" )
155
159
156
160
def do_run (self ):
157
161
context = ssl .SSLContext (ssl .PROTOCOL_TLS_SERVER )
@@ -168,6 +172,8 @@ def do_run(self):
168
172
try :
169
173
conn , addr = ssock .accept ()
170
174
self .thread_pool .submit (self ._handle_socket , conn , addr )
175
+ except ssl .SSLZeroReturnError :
176
+ pass
171
177
except Exception as e :
172
178
LOG .exception ("Error accepting socket: %s" , e )
173
179
0 commit comments