2011-05-02 38 views
1

This示例代碼包含:爲什麼要改變curl_multi_timeout()的返回值?

curl_multi_timeout(multi_handle, &curl_timeo); 
if(curl_timeo >= 0) { 
    timeout.tv_sec = curl_timeo/1000; 
    if(timeout.tv_sec > 1) 
    timeout.tv_sec = 1; 
    else 
    timeout.tv_usec = (curl_timeo % 1000) * 1000; 
} 

爲什麼tv_sec截取到1秒?爲什麼curl_multi_timeout()原樣返回的值(在除以1000之後)?

假設上面有一個很好的理由,那麼有沒有這樣的情況,當你不會剪輯值爲1秒?那是什麼情況?

回答

1

該代碼只是爲以後撥打電話select()設置最長等待時間。如果有的話,這看起來像一個錯誤。它看起來好像代碼保護自己免受來自curl_multi_timeout()的無理回答。我的猜測是編碼員想,「如果curl超時函數返回超過一分鐘的內容,那麼不要再等了。」 ...然後進行一分鐘錯字一秒鐘。它可能應該做

if (timeout.tv_sec > 60) { 
    timeout.tv_sec = 60; 
else if (timeout.tv_sec == 0) { 
    timeout.tv_usec = curl_timeo * 1000; 
} 

由1000 MOD是因爲curl_multi_timeout()回報毫秒不必要的,所以如果tv_sec是零,這意味着,返回值的範圍爲0 - 999

+0

但tv_usec是微秒。如果curl_timeo是毫秒,那麼你需要乘以1000.這只是看起來不對的mod。對? – 2011-05-02 14:42:44

+0

@Paul:不,tv_usec也是毫秒 - 你不需要額外的因子1000.如果你使用的是微秒,你可以使用struct timespec,它有一個微秒的tv_nsec成員。該代碼使用較舊的'struct timeval'。 – unpythonic 2011-05-02 15:01:58

+0

不,tv_usec確實是微秒:'u'是micro的SI前綴。其他地方:http://www.gnu.org/s/hello/manual/libc/Elapsed-Time.html – 2011-05-02 15:09:03