True. If the purpose of rescuing ::Timeout::Error, ::Errno::EPIPE is for send_request_cgi(), I don't think you'll ever hit this code path because they're already handled by send_request_cgi(), which is why it may return nil.  So if you want to handle the timeout problem correctly, just catch nil :-)

Note: Catching ::Timeout::Error, ::Errno::EPIPE in modules has been used for a long time in modules without understanding why.