MCPcopy Index your code
hub / github.com/Bitmessage/PyBitmessage / run

Method run

src/class_receiveDataThread.py:85–151  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

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

Callers

nothing calls this directly

Calls 6

sendpingMethod · 0.95
processDataMethod · 0.95
waitMethod · 0.80
putMethod · 0.80
recvMethod · 0.45

Tested by

no test coverage detected