function exec()
 {
     # http://www.php.net/manual/en/function.curl-multi-exec.php
     $active = null;
     do {
         $mrc = curl_multi_exec($this->handle, $active);
     } while ($mrc == CURLM_CALL_MULTI_PERFORM);
     while ($active && $mrc == CURLM_OK) {
         if (curl_multi_select($this->handle, xhttp_multi::curl_multi_select_timeout) != -1) {
             do {
                 $mrc = curl_multi_exec($this->handle, $active);
             } while ($mrc == CURLM_CALL_MULTI_PERFORM);
         }
     }
     $responses = array();
     foreach ($this->requests as $request) {
         $response = curl_multi_getcontent($request['handle']);
         $responses[] = xhttp::after_curl_execution($request['handle'], $response, $request['data']);
     }
     xhttp_multi::stop();
     return $responses;
 }