def poll_again(fiber, connection, request_options, stop_at)
      http = connection.send(:get, request_options)
      http.errback { fiber.resume(*handle_error("POLL", http.error)) }
      http.callback do
        code, body, headers = http.response_header.status, http.response, http.response_header
        if code == 200 && (body.nil? || body == "null") && Time.now < stop_at
          poll_again(fiber, connection, request_options, stop_at)
        else
          fiber.resume(code, body, headers)
        end
      end
      true
    end
def poll_again(fiber, connection, request_options, stop_at)
      http = connection.send(:get, request_options)
      http.errback { fiber.resume(*handle_error("POLL", http.error)) }
      http.callback do
        code, body, headers = http.response_header.status, http.response, http.response_header
        if code == 200 && (body.nil? || body == "null") && Time.now < stop_at
          poll_again(fiber, connection, request_options, stop_at)
        else
          fiber.resume(code, body, headers)
        end
      end
      true
    end
Repeatedly make long-polling request until receive data, hit error, or timeout
 Treat "terminating" and "reconnecting" errors as an empty poll result

 @param [Symbol] verb for HTTP REST request
 @param [EM:HttpRequest] connection to server from previous request
 @param [Hash] request_options for HTTP request
 @param [Time] stop_at time for polling

 @return [TrueClass] always true

 @raise [HttpException] HTTP failure with associated status code