No need for explicit return.
Simplified error rescuing.

If there's an error reading, just send an empty array back. If there's an error closing, it's no big deal.
OpenSSL can play nicely with MRI 1.8 and read_nonblock.