File tree Expand file tree Collapse file tree 2 files changed +10
-4
lines changed
Expand file tree Collapse file tree 2 files changed +10
-4
lines changed Original file line number Diff line number Diff line change 2929
3030def _bencode_connect (uri ):
3131 s = socket .create_connection (uri .netloc .split (":" ))
32- # TODO I don't think .close() will propagate to the socket automatically...
3332 f = s .makefile ('rw' )
34- return bencode .BencodeIO (f )
33+ return bencode .BencodeIO (f , on_close = s . close )
3534
3635
3736def _match_criteria (criteria , msg ):
Original file line number Diff line number Diff line change @@ -146,8 +146,9 @@ def decode(string):
146146
147147
148148class BencodeIO (object ):
149- def __init__ (self , file ):
149+ def __init__ (self , file , on_close = None ):
150150 self ._file = file
151+ self ._on_close = on_close
151152
152153 def read (self ):
153154 return _read_datum (self ._file )
@@ -176,4 +177,10 @@ def flush(self):
176177 self ._file .flush ()
177178
178179 def close (self ):
179- self ._file .close ()
180+ # Run the on_close handler if one exists, which can do something
181+ # useful like cleanly close a socket. (Note that .close() on a
182+ # socket.makefile('rw') does some kind of unclean close.)
183+ if self ._on_close is not None :
184+ self ._on_close ()
185+ else :
186+ self ._file .close ()
You can’t perform that action at this time.
0 commit comments