I am working on a software project which must load data from a WMS server. To accomplish this, I am planning to use GDALOpen() to open a GDAL_WMS XML file (by way of the GDAL WMS client driver - see http://www.gdal.org/frmt_wms.html). In prototypes, this was seen to work pretty well, however in my project I have a very strict requirement around the maximum amount of time that may be spent fetching the image from the WMS. If the fetching process takes any longer than the timeout, the operation must immediately fail.
I noticed that the GDAL WMS driver supports a "Timeout" tag in the XML input parameters which is documented as the "Connection timeout in seconds. (optional, defaults to 300)". I was hopeful that this parameter will help me solve the problem, so I examined how this value is used in the WMS driver and found that it is effectively passed to CURL via the CURLOPT_TIMEOUT option in gdalhttp.cpp (see http://trac.osgeo.org/gdal/browser/trunk/gdal/frmts/wms/gdalhttp.cpp). The CURL documentation states that CURLOPT_TIMEOUT specifies the "maximum time in seconds that you allow the libcurl transfer operation to take" (see http://curl.haxx.se/libcurl/c/curl_easy_setopt.html#CURLOPTTIMEOUT <http://curl.haxx.se/libcurl/c/curl_easy_setopt.html%23CURLOPTTIMEOUT> ). In the function CPLHTTPFetchMulti() in gdalhttp.cpp, the call is made to curl_multi_perform(), which appears to do the bulk of the transfer work. According to my understanding of curl_multi_perform(), if the timeout is reached then curl_multi_perform() will return, however I don't see any logic in CPLHTTPFetchMulti() which then aborts the transfer on the timeout condition. Instead, it appears that the loop will just keep retrying to download the file. As I stated, in my project the operation must abort if the timeout is reached. Yet based on my analysis of the code in CPLHTTPFetchMulti() it seems that setting the "Timeout" option is not going to abort the operation as I require. Am I missing something? Can anyone verify what kind of semantics we can expect when we set the "Timeout" option? If I am mistaken, and the GDALOpen() operation is aborted on a timeout condition, then how can I determine whether the operation failed as a result of a timeout? Thanks very much in advance, Alex Comer This electronic communication and any attachments may contain confidential and proprietary information of DigitalGlobe, Inc. If you are not the intended recipient, or an agent or employee responsible for delivering this communication to the intended recipient, or if you have received this communication in error, please do not print, copy, retransmit, disseminate or otherwise use the information. Please indicate to the sender that you have received this communication in error, and delete the copy you received. DigitalGlobe reserves the right to monitor any electronic communication sent or received by its employees, agents or representatives.
_______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev