2011-06-20 19 views
10

Necesito cargar directorios a un servidor FTP en mi aplicación y plan de usar libcurl. Veo que no hay una forma directa de cargar un directorio con muchos archivos , lo cual tiene sentido para mí. Sin embargo, no pude encontrar ninguna mención en cargando muchos archivos.libcurl - Mantener la conexión "abierta" para Cargar varios archivos (FTP)

Si obtengo la lista de archivos en el directorio, podría cargarlos en un bucle. La opción CURLOPT_FTP_CREATE_MISSING_DIRS podría ayudar con los subdirectorios, pero si quisiera saber también si me falta el punto aquí o esto tendría algún inconveniente serio.

La pregunta principal es: ¿cómo puedo mantener la conexión "abierta"? Volver a conectar en cada archivo probablemente significaría una sobrecarga adicional no deseada.

Idealmente, me gustaría seguir usando la interfaz fácil. Pero si otra interfaz proporciona una mejor asistencia en este caso, la usaré.

CURLcode ret; 
CURL *handle = curl_easy_init(); 

/* Connect to FTP server using  * 
* the given username and password */ 

for ({each file}) { 

    curl_easy_setopt(handle, ..., ...); 
    ... 
    ret = curl_easy_perform(handle); 
    /* Analyse return code */ 
    curl_easy_reset(handle); 
} 

/* Disconnect from server */ 
curl_easy_clenup(handle); 

Respuesta

12

Sólo volver a utilizar el mismo mango, y que se mantendrá abierta la conexión tanto como las transferencias posibles y posteriores se volverá a utilizar el anterior.

Cuando utiliza la interfaz fácil, la caché de conexión se mantiene dentro del fácil manejo. Si en su lugar usa la interfaz múltiple, la memoria caché de conexión se mantendrá dentro del controlador múltiple y se compartirá entre todos los controladores fáciles que se usan dentro del mismo controlador múltiple.

+0

Muchas gracias Sr. Stenberg, ¡qué orgulloso de recibir una respuesta suya! Si puedo pedir más aclaraciones, ¿será necesario 'curl_easy_reset()' en este caso? La página man dice que las conexiones en vivo se mantienen en el mango, sin embargo, ¿bastaría con volver a establecer las opciones manualmente (en el ciclo)? – sidyll

+0

Puedes hacer lo que creas que se ajuste mejor a tu código. El reinicio no matará la caché de conexión. Puede volver a establecer las opciones manualmente si lo prefiere. –

+0

Gracias una vez más, y felicidades por el trabajo increíble. Mis mejores deseos – sidyll

Cuestiones relacionadas