Browse Source

More error handling and closing of device on error.

pyserial_fix
Scott Petersen 11 years ago
parent
commit
d18b070f62
1 changed files with 21 additions and 3 deletions
  1. +21
    -3
      alarmdecoder/devices.py

+ 21
- 3
alarmdecoder/devices.py View File

@@ -152,8 +152,16 @@ class Device(object):
except InvalidMessageError:
pass

except SSL.WantReadError:
pass

except CommError, err:
self._device.close()

except Exception, err:
self._device.close()
self._running = False
raise


class USBDevice(Device):
@@ -920,9 +928,15 @@ class SocketDevice(Device):
self._init_ssl()

self._device.connect((self._host, self._port))
#self._device.setblocking(1)

if self._use_ssl:
self._device.do_handshake()
while True:
try:
self._device.do_handshake()
break
except SSL.WantReadError:
pass

self._id = '{0}:{1}'.format(self._host, self._port)

@@ -951,11 +965,11 @@ class SocketDevice(Device):
# Make sure that it closes immediately.
self._device.shutdown(socket.SHUT_RDWR)

Device.close(self)

except Exception:
pass

Device.close(self)

def fileno(self):
return self._device.fileno()

@@ -1048,6 +1062,10 @@ class SocketDevice(Device):
except socket.error, err:
raise CommError('Error reading from device: {0}'.format(str(err)), err)

except SSL.SysCallError, err:
errno, msg = err
raise CommError('SSL error while reading from device: {0} ({1})'.format(msg, errno))

else:
if got_line:
ret, self._buffer = self._buffer, ''


Loading…
Cancel
Save