summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--serial/serialwin32.py7
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()