(self)
| 83 | self.startTime = time.time() |
| 84 | |
| 85 | def run(self): |
| 86 | logger.debug('receiveDataThread starting. ID ' + str(id(self)) + '. The size of the shared.connectedHostsList is now ' + str(len(shared.connectedHostsList))) |
| 87 | |
| 88 | while state.shutdown == 0: |
| 89 | dataLen = len(self.data) |
| 90 | try: |
| 91 | isSSL = False |
| 92 | if ((self.services & protocol.NODE_SSL == protocol.NODE_SSL) and |
| 93 | self.connectionIsOrWasFullyEstablished and |
| 94 | protocol.haveSSL(not self.initiatedConnection)): |
| 95 | isSSL = True |
| 96 | dataRecv = self.sslSock.recv(throttle.ReceiveThrottle().chunkSize) |
| 97 | else: |
| 98 | dataRecv = self.sock.recv(throttle.ReceiveThrottle().chunkSize) |
| 99 | self.data += dataRecv |
| 100 | throttle.ReceiveThrottle().wait(len(dataRecv)) |
| 101 | except socket.timeout: |
| 102 | if self.connectionIsOrWasFullyEstablished: |
| 103 | self.sendping("Still around!") |
| 104 | continue |
| 105 | logger.error("Timeout during protocol initialisation") |
| 106 | break |
| 107 | except ssl.SSLError as err: |
| 108 | if err.errno == ssl.SSL_ERROR_WANT_READ: |
| 109 | select.select([self.sslSock], [], [], 10) |
| 110 | logger.debug('sock.recv retriable SSL error') |
| 111 | continue |
| 112 | if err.errno is None and 'timed out' in str(err): |
| 113 | if self.connectionIsOrWasFullyEstablished: |
| 114 | self.sendping("Still around!") |
| 115 | continue |
| 116 | logger.error ('SSL error: %i/%s', err.errno if err.errno else 0, str(err)) |
| 117 | break |
| 118 | except socket.error as err: |
| 119 | if err.errno in (errno.EAGAIN, errno.EWOULDBLOCK) or \ |
| 120 | (sys.platform.startswith('win') and \ |
| 121 | err.errno == errno.WSAEWOULDBLOCK): |
| 122 | select.select([self.sslSock if isSSL else self.sock], [], [], 10) |
| 123 | logger.debug('sock.recv retriable error') |
| 124 | continue |
| 125 | logger.error('sock.recv error. Closing receiveData thread, %s', str(err)) |
| 126 | break |
| 127 | # print 'Received', repr(self.data) |
| 128 | if len(self.data) == dataLen: # If self.sock.recv returned no data: |
| 129 | logger.debug('Connection to ' + str(self.peer) + ' closed. Closing receiveData thread') |
| 130 | break |
| 131 | else: |
| 132 | self.processData() |
| 133 | |
| 134 | try: |
| 135 | for stream in self.streamNumber: |
| 136 | try: |
| 137 | del self.selfInitiatedConnections[stream][self] |
| 138 | except KeyError: |
| 139 | pass |
| 140 | logger.debug('removed self (a receiveDataThread) from selfInitiatedConnections') |
| 141 | except: |
| 142 | pass |
nothing calls this directly
no test coverage detected