def _poll_read(self, timeout=None):
if not self.client_side:
return self.upstream.wait(timeout)
self.sock.settimeout(timeout)
try:
buf, addr=self.sock.recvfrom(self.MAX_IO_CHUNK)
except socket.timeout:
self.total_timeout+=timeout
if self.total_timeout>300:
self.sock.close() # too much inactivity, disconnect to let it reconnect
return False
except socket.error:
ex = sys.exc_info()[1]
if get_exc_errno(ex) in (errno.EAGAIN, errno.EWOULDBLOCK):
# windows just has to be a bitch
return True
self.close()
raise EOFError(ex)
if not buf:
self.close()
raise EOFError("connection closed by peer")
self.buf_in.write(BYTES_LITERAL(buf))
self.total_timeout=0
return True
评论列表
文章目录