diff options
-rw-r--r-- | serial/serialwin32.py | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/serial/serialwin32.py b/serial/serialwin32.py index 037f282..484c4a1 100644 --- a/serial/serialwin32.py +++ b/serial/serialwin32.py @@ -270,7 +270,7 @@ class Serial(SerialBase): flags = win32.DWORD() comstat = win32.COMSTAT() if not win32.ClearCommError(self._port_handle, ctypes.byref(flags), ctypes.byref(comstat)): - raise SerialException('call to ClearCommError failed') + raise SerialException("ClearCommError failed ({!r})".format(ctypes.WinError())) n = min(comstat.cbInQue, size) if self.timeout == 0 else size if n > 0: buf = ctypes.create_string_buffer(n) @@ -283,11 +283,14 @@ class Serial(SerialBase): ctypes.byref(self._overlapped_read)) if not read_ok and win32.GetLastError() not in (win32.ERROR_SUCCESS, win32.ERROR_IO_PENDING): raise SerialException("ReadFile failed ({!r})".format(ctypes.WinError())) - win32.GetOverlappedResult( + result_ok = win32.GetOverlappedResult( self._port_handle, ctypes.byref(self._overlapped_read), ctypes.byref(rc), True) + if not result_ok: + if win32.GetLastError() != win32.ERROR_OPERATION_ABORTED: + raise SerialException("GetOverlappedResult failed ({!r})".format(ctypes.WinError())) read = buf.raw[:rc.value] else: read = bytes() |