def METHOD_NAME(self, timeout):
    '''
    timeout as float in seconds
    returns:
        - None on error or disconnection
        - bytes() (empty) on timeout
    '''
    events = self.epoll.poll(timeout)
    for ev in events:
        (fd, event) = ev
        if fd != self.sock.fileno():
            continue
        # check for socket error
        if event & EPOLLERR:
            return None
        # EPOLLIN or EPOLLPRI, just read the message
        msg = self.sock.METHOD_NAME(4096)
        # socket disconnected
        if len(msg) == 0:
            return None
        return msg
    return bytes()