'Handle one request, possibly blocking.
Respects self.timeout.'

def handle_request(self):

    timeout = self.socket.gettimeout()
    if (timeout is None):
        timeout = self.timeout
    elif (self.timeout is not None):
        timeout = min(timeout, self.timeout)
    fd_sets = select.select([self], [], [], timeout)
    if (not fd_sets[0]):
        self.handle_timeout()
        return
    else:
        self._handle_request_noblock()
        return
