@@ -322,22 +322,32 @@ def _recv_bytes(self, maxsize=None):
322
322
try :
323
323
ov , err = _winapi .ReadFile (self ._handle , bsize ,
324
324
overlapped = True )
325
+
326
+ sentinel = object ()
327
+ return_value = sentinel
325
328
try :
326
- if err == _winapi .ERROR_IO_PENDING :
327
- waitres = _winapi .WaitForMultipleObjects (
328
- [ov .event ], False , INFINITE )
329
- assert waitres == WAIT_OBJECT_0
329
+ try :
330
+ if err == _winapi .ERROR_IO_PENDING :
331
+ waitres = _winapi .WaitForMultipleObjects (
332
+ [ov .event ], False , INFINITE )
333
+ assert waitres == WAIT_OBJECT_0
334
+ except :
335
+ ov .cancel ()
336
+ raise
337
+ finally :
338
+ nread , err = ov .GetOverlappedResult (True )
339
+ if err == 0 :
340
+ f = io .BytesIO ()
341
+ f .write (ov .getbuffer ())
342
+ return_value = f
343
+ elif err == _winapi .ERROR_MORE_DATA :
344
+ return_value = self ._get_more_data (ov , maxsize )
330
345
except :
331
- ov .cancel ()
332
- raise
333
- finally :
334
- nread , err = ov .GetOverlappedResult (True )
335
- if err == 0 :
336
- f = io .BytesIO ()
337
- f .write (ov .getbuffer ())
338
- return f
339
- elif err == _winapi .ERROR_MORE_DATA :
340
- return self ._get_more_data (ov , maxsize )
346
+ if return_value is sentinel :
347
+ raise
348
+
349
+ if return_value is not sentinel :
350
+ return return_value
341
351
except OSError as e :
342
352
if e .winerror == _winapi .ERROR_BROKEN_PIPE :
343
353
raise EOFError
0 commit comments