es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Libcurl – ¿Qué significa “curl_multi_perform”?

Estoy tratando de entender cómo funciona curlmulti perform.
La documentación dice que:

Esta función realiza transferencias en todos los handles agregados que necesitan atención de manera no bloqueante. Los handles fáciles se han agregado previamente al handle múltiple con curlmulti addhandle.

Cuando una aplicación descubre que hay datos disponibles para el handle múltiple o ha transcurrido un tiempo de espera, la aplicación debe llamar a esta función para leer/escribir lo que sea necesario leer o escribir en ese momento, etc.

Pregunta 1: ¿Qué significa “la aplicación debe llamar”? ¿Cómo puede una aplicación causar algo? ¿Querías decir que el programador debe llamar?

De acuerdo, encontré dos ejemplos de uso sencillos de “curlmulti perform”:

1 – https://everything.curl.dev/libcurl/drive/multi

“`código
int transfers_running;
do {
curl_multi_wait ( multi_handle, NULL, 0, 1000, NULL);
curl_multi_perform ( multi_handle, &transfers_running );
} while (transfers_running);

<pre><code><br />2 – [enlace a la página](https://curl.se/libcurl/c/curl_multi_perform.html)

“`código
int still_running;
do {
CURLMcode mc = curl_multi_perform(multi_handle, &still_running);

if(!mc && still_running)
/* esperar por actividad, tiempo de espera o “nada” */
mc = curl_multi_poll(multi_handle, NULL, 0, 1000, NULL);

if(mc) {
fprintf(stderr, “curl_multi_poll() falló, código %d.\n”, (int)mc);
break;
}

/* si todavía hay transferencias, ¡repetir! */
} while(still_running);

  • Primero:
  • en el primer ejemplo, curlmulti perform se llama después de curlmulti wait.
  • en el segundo ejemplo, curlmulti perform se llama antes de curlmulti wait.

Nada está claro.

En segundo lugar:

¿Por qué necesito llamar a curlmulti perform en un bucle? No lo entiendo.

¿Por qué una sola llamada no es suficiente?

Tags:  , ,

Answer

  1. Avatar for davy.ai
    1. La “aplicación debe llamar” en la documentación se refiere al programador o desarrollador que está implementando la función curl_multi_perform en su aplicación. Esto significa que el programador necesita llamar a la función para realizar transferencias en todos los manejadores agregados que requieren atención de manera no bloqueante.

    2. La función curl_multi_perform debe ser llamada en un bucle porque es una función no bloqueante. Esto significa que no bloquea el programa mientras espera que se transfieran los datos. En cambio, devuelve el control al programa que llama de inmediato. El bucle permite al programa llamador verificar repetidamente las transferencias que necesitan atención, realizarlas y luego verificar nuevamente hasta que todas las transferencias estén completas. Esto es necesario porque puede haber múltiples transferencias que deben realizarse y cada transferencia puede tomar diferentes cantidades de tiempo para completarse. Llamando a curl_multi_perform repetidamente en un bucle, el programa llamador puede garantizar que todas las transferencias se completen de manera oportuna y eficiente.

Comments are closed.