class TCPIncoming(PauseWithBackoff): def __init__(self, acceptResponse): super(TCPIncoming, self).__init__() self._aResp = acceptResponse self._rData = ReceiveBuffer(serializer.loads) self._expires = datetime.now() + MAX_INCOMING_SOCKET_PERIOD self._aResp[0].setblocking(0) # Disable Nagle to transmit headers and acks asap self._aResp[0].setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) self._openSock = True self.failCount = 0 @property def socket(self): return self._aResp[0] if self._openSock else None @property def fromAddress(self): return ActorAddress(TCPv4ActorAddress(*(self._aResp[1]))) def delay(self): now = datetime.now() # n.b. include _pauseUntil from PauseWithBackoff return max( timedelta(seconds=0), min(self._expires - now, getattr(self, '_pauseUntil', self._expires) - now)) def addData(self, newData): self._rData.addMore(newData) def remainingSize(self): return self._rData.remainingAmount() def receivedAllData(self): return self._rData.isDone() @property def data(self): return self._rData.completed()[0] def close(self): s = self.socket if s: self._openSock = False _safeSocketShutdown(s) def __del__(self): s = self.socket if s: self._openSock = False _safeSocketShutdown(s) def __str__(self): return 'TCPInc(%s)<%s>' % (str(self._aResp), str(self._rData))
class TCPIncoming(PauseWithBackoff): def __init__(self, acceptResponse): super(TCPIncoming, self).__init__() self._aResp = acceptResponse self._rData = ReceiveBuffer(serializer.loads) self._expires = datetime.now() + MAX_INCOMING_SOCKET_PERIOD self._aResp[0].setblocking(0) # Disable Nagle to transmit headers and acks asap self._aResp[0].setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1) self._openSock = True self.failCount = 0 @property def socket(self): return self._aResp[0] if self._openSock else None @property def fromAddress(self): return ActorAddress(TCPv4ActorAddress(*(self._aResp[1]))) def delay(self): now = datetime.now() # n.b. include _pauseUntil from PauseWithBackoff return max(timedelta(seconds=0), min(self._expires - now, getattr(self, '_pauseUntil', self._expires) - now)) def addData(self, newData): self._rData.addMore(newData) def remainingSize(self): return self._rData.remainingAmount() def receivedAllData(self): return self._rData.isDone() @property def data(self): return self._rData.completed()[0] def close(self): s = self.socket if s: self._openSock = False _safeSocketShutdown(s) def __del__(self): s = self.socket if s: self._openSock = False _safeSocketShutdown(s) def __str__(self): return 'TCPInc(%s)<%s>'%(str(self._aResp), str(self._rData))