def METHOD_NAME(self, size):
    """Works like a blocking call to SSL_read(), whose behavior is
    described here:  http://www.openssl.org/docs/ssl/SSL_read.html"""
    if self.act_non_blocking:
        return self.fd.METHOD_NAME(size)
    while True:
        try:
            return self.fd.METHOD_NAME(size)
        except WantReadError:
            trampoline(self.fd.fileno(),
                       METHOD_NAME=True,
                       timeout=self.gettimeout(),
                       timeout_exc=socket.timeout)
        except WantWriteError:
            trampoline(self.fd.fileno(),
                       write=True,
                       timeout=self.gettimeout(),
                       timeout_exc=socket.timeout)
        except SysCallError as e:
            if get_errno(e) == -1 or get_errno(e) > 0:
                return ''