File tree 2 files changed +16
-4
lines changed
2 files changed +16
-4
lines changed Original file line number Diff line number Diff line change @@ -4,7 +4,7 @@ Changelog
4
4
2.0.1 (unreleased)
5
5
-------------------
6
6
7
- - nothing yet
7
+ - Fix socket leaks in ` NetworkingThread `
8
8
9
9
2.0.0 (2020-04-16)
10
10
-------------------
Original file line number Diff line number Diff line change 9
9
import threading
10
10
import selectors
11
11
import platform
12
+ from typing import cast
12
13
13
14
from .udp import UDPMessage
14
15
from .actions import *
@@ -156,10 +157,14 @@ def run(self):
156
157
157
158
def _recvMessages (self ):
158
159
for key , events in self ._selector .select (0 ):
159
- sock = socket .fromfd (key .fd , socket .AF_INET , socket .SOCK_DGRAM )
160
+ if self ._quitEvent .is_set ():
161
+ break
162
+
163
+ sock = cast (socket .socket , key .fileobj )
164
+
160
165
try :
161
166
data , addr = sock .recvfrom (BUFFER_SIZE )
162
- except socket .error as e :
167
+ except socket .error :
163
168
time .sleep (0.01 )
164
169
continue
165
170
@@ -253,12 +258,19 @@ def start(self):
253
258
self ._multiOutUniInSockets = {} # FIXME synchronisation
254
259
255
260
def join (self ):
261
+ assert self ._quitEvent .is_set ()
256
262
super (NetworkingThread , self ).join ()
257
- self ._uniOutSocket .close ()
258
263
259
264
self ._selector .unregister (self ._multiInSocket )
265
+ self ._uniOutSocket .close ()
260
266
self ._multiInSocket .close ()
261
267
268
+ for sock in self ._multiOutUniInSockets .values ():
269
+ try :
270
+ sock .close ()
271
+ except socket .error :
272
+ ...
273
+
262
274
263
275
class ThreadedNetworking :
264
276
"handle threaded networking start & stop, address add/remove & message sending"
You can’t perform that action at this time.
0 commit comments