[译]curl_multi_perform
http://curl.haxx.se/libcurl/c/curl_multi_perform.html
curl_multi_perform.3 -- man page
NAME
curl_multi_perform - reads/writes available data from each easy handle
在每个easy handle上读写数据
SYNOPSIS
#include <curl/curl.h>
CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);
DESCRIPTION
This function handles transfers on all the added handles that need attention in an non-blocking fashion.
这个函数处理所有添加到multi handle中的需要关注的非阻塞式handle
When an application has found out there's data available for the multi_handle or a timeout has elapsed, the application should call this function to read/write whatever there is to read or write right now etc. curl_multi_perform returns as soon as the reads/writes are done. This function does not require that there actually is any data available for reading or that data can be written, it can be called just in case. It will write the number of handles that still transfer data in the second argument's integer-pointer.
当一个程序发现有mulit handle可用的数据或者有超时发生,
程序应该调用curl_multi_perform函数来进行读写数据。
当读写完成,curl_multi_perform会立即返回。
这个函数不需要此时有实际的可读写数据,所以可以在以防万一的时候调用他。
这个函数会写入第二个参数中仍然还是传输数据的handle。
If the amount of running_handles is changed from the previous call (or is less than the amount of easy handles you've added to the multi handle), you know that there is one or more transfers less "running". You can then call curl_multi_info_read to get information about each individual completed transfer, and that returned info includes CURLcode and more. If an added handle fails very quickly, it may never be counted as a running_handle.
如果running_handles参数在函数调用之前修改了(增加或者减少了)
你知道现在仍有一个或者多个handle还在传输数据,你可以调用curl_multi_info_read来获取每个handle的信息,
可以获得的信息包括CURLcode和其他一些信息。
如果在添加handle的时候很快失败了,则handle计数器不会增加。
When running_handles is set to zero (0) on the return of this function, there is no longer any transfers in progress.
如果返回的running_handles为0,则表明现在已经没有handle在传输数据了。
RETURN VALUE
返回值
CURLMcode type, general libcurl multi interface error code.
CURLMcode类型,一般是multi interface的错误码
Before version 7.20.0: If you receive CURLM_CALL_MULTI_PERFORM, this basically means that you should call curl_multi_perform again, before you select() on more actions. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied". Do note that curl_multi_perform will return CURLM_CALL_MULTI_PERFORM only when it wants to be called again immediately. When things are fine and there is nothing immediate it wants done, it'll return CURLM_OK and you need to wait for "action" and then call this function again.
在7.20.0之前的版本:
如果收到CURLM_CALL_MULTI_PERFORM,这基本上意味着在你select或者做其他操作之前,需要再次调用curl_multi_perform。
This function only returns errors etc regarding the whole multi stack. Problems still might have occurred on individual transfers even when this function returns CURLM_OK. Use curl_multi_info_read to figure out how individual transfers did.
这个函数只是返回关于整个multi stack的错误码。
问题有可能仍然在某个传输中存在,即使函数返回CURLM_OK。
使用curl_multi_info_read来找出存在问题的传输。
TYPICAL USAGE
主要用途
Most applications will use curl_multi_fdset to get the multi_handle's file descriptors, and curl_multi_timeout to get a suitable timeout period, then it'll wait for action on the file descriptors using select(3). As soon as one or more file descriptor is ready, curl_multi_perform gets called.
大多数程序使用curl_multi_fdset来获取multi handle的文件描述符,
使用curl_multi_timeout来获取一个合适的timeout周期,
然后使用select等待文件描述符上的变化。
一旦一个或者多个文件描述符状态为ready,则调用curl_multi_perform。