curl/docs/libcurl/curl_multi_wakeup.md
Daniel Stenberg e3fe020089
docs/libcurl: generate PROTOCOLS from meta-data
Remove the PROTOCOLS section from the source files completely and
instead generate them based on the header data in the curldown files.

It also generates TLS backend information for options marked for TLS as
protocol.

Closes #13175
2024-03-23 18:13:03 +01:00

1.8 KiB

c SPDX-License-Identifier Title Section Source See-also Protocol
Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al. curl curl_multi_wakeup 3 libcurl
curl_multi_poll (3)
curl_multi_wait (3)
All

NAME

curl_multi_wakeup - wakes up a sleeping curl_multi_poll call

SYNOPSIS

#include <curl/curl.h>

CURLMcode curl_multi_wakeup(CURLM *multi_handle);

DESCRIPTION

This function can be called from any thread and it wakes up a sleeping curl_multi_poll(3) call that is currently (or is about to be) waiting for activity or a timeout.

If the function is called when there is no curl_multi_poll(3) call, it causes the next call to return immediately.

Calling this function only guarantees to wake up the current (or the next if there is no current) curl_multi_poll(3) call, which means it is possible that multiple calls to this function wake up the same waiting operation.

This function has no effect on curl_multi_wait(3) calls.

EXAMPLE

extern int time_to_die(void);
extern int set_something_to_signal_thread_1_to_exit(void);
extern int decide_to_stop_thread1();

int main(void)
{
  CURL *easy;
  CURLM *multi;
  int still_running;

  /* add the individual easy handle */
  curl_multi_add_handle(multi, easy);

  /* this is thread 1 */
  do {
    CURLMcode mc;
    int numfds;

    mc = curl_multi_perform(multi, &still_running);

    if(mc == CURLM_OK) {
      /* wait for activity, timeout or wakeup */
      mc = curl_multi_poll(multi, NULL, 0, 10000, &numfds);
    }

    if(time_to_die())
      return 1;

  } while(still_running);

  curl_multi_remove_handle(multi, easy);

  /* this is thread 2 */

  if(decide_to_stop_thread1()) {

    set_something_to_signal_thread_1_to_exit();

    curl_multi_wakeup(multi);
  }
}

AVAILABILITY

Added in 7.68.0

RETURN VALUE

CURLMcode type, general libcurl multi interface error code.