| @@ -152,8 +152,16 @@ class Device(object): | |||||
| except InvalidMessageError: | except InvalidMessageError: | ||||
| pass | pass | ||||
| except SSL.WantReadError: | |||||
| pass | |||||
| except CommError, err: | |||||
| self._device.close() | |||||
| except Exception, err: | except Exception, err: | ||||
| self._device.close() | |||||
| self._running = False | self._running = False | ||||
| raise | |||||
| class USBDevice(Device): | class USBDevice(Device): | ||||
| @@ -920,9 +928,15 @@ class SocketDevice(Device): | |||||
| self._init_ssl() | self._init_ssl() | ||||
| self._device.connect((self._host, self._port)) | self._device.connect((self._host, self._port)) | ||||
| #self._device.setblocking(1) | |||||
| if self._use_ssl: | 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) | self._id = '{0}:{1}'.format(self._host, self._port) | ||||
| @@ -951,11 +965,11 @@ class SocketDevice(Device): | |||||
| # Make sure that it closes immediately. | # Make sure that it closes immediately. | ||||
| self._device.shutdown(socket.SHUT_RDWR) | self._device.shutdown(socket.SHUT_RDWR) | ||||
| Device.close(self) | |||||
| except Exception: | except Exception: | ||||
| pass | pass | ||||
| Device.close(self) | |||||
| def fileno(self): | def fileno(self): | ||||
| return self._device.fileno() | return self._device.fileno() | ||||
| @@ -1048,6 +1062,10 @@ class SocketDevice(Device): | |||||
| except socket.error, err: | except socket.error, err: | ||||
| raise CommError('Error reading from device: {0}'.format(str(err)), 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: | else: | ||||
| if got_line: | if got_line: | ||||
| ret, self._buffer = self._buffer, '' | ret, self._buffer = self._buffer, '' | ||||