xref: /aosp_15_r20/external/curl/docs/libcurl/curl_multi_wakeup.md (revision 6236dae45794135f37c4eb022389c904c8b0090d)
1*6236dae4SAndroid Build Coastguard Worker---
2*6236dae4SAndroid Build Coastguard Workerc: Copyright (C) Daniel Stenberg, <[email protected]>, et al.
3*6236dae4SAndroid Build Coastguard WorkerSPDX-License-Identifier: curl
4*6236dae4SAndroid Build Coastguard WorkerTitle: curl_multi_wakeup
5*6236dae4SAndroid Build Coastguard WorkerSection: 3
6*6236dae4SAndroid Build Coastguard WorkerSource: libcurl
7*6236dae4SAndroid Build Coastguard WorkerSee-also:
8*6236dae4SAndroid Build Coastguard Worker  - curl_multi_poll (3)
9*6236dae4SAndroid Build Coastguard Worker  - curl_multi_wait (3)
10*6236dae4SAndroid Build Coastguard WorkerProtocol:
11*6236dae4SAndroid Build Coastguard Worker  - All
12*6236dae4SAndroid Build Coastguard WorkerAdded-in: 7.68.0
13*6236dae4SAndroid Build Coastguard Worker---
14*6236dae4SAndroid Build Coastguard Worker
15*6236dae4SAndroid Build Coastguard Worker# NAME
16*6236dae4SAndroid Build Coastguard Worker
17*6236dae4SAndroid Build Coastguard Workercurl_multi_wakeup - wake up a sleeping curl_multi_poll call
18*6236dae4SAndroid Build Coastguard Worker
19*6236dae4SAndroid Build Coastguard Worker# SYNOPSIS
20*6236dae4SAndroid Build Coastguard Worker
21*6236dae4SAndroid Build Coastguard Worker~~~c
22*6236dae4SAndroid Build Coastguard Worker#include <curl/curl.h>
23*6236dae4SAndroid Build Coastguard Worker
24*6236dae4SAndroid Build Coastguard WorkerCURLMcode curl_multi_wakeup(CURLM *multi_handle);
25*6236dae4SAndroid Build Coastguard Worker~~~
26*6236dae4SAndroid Build Coastguard Worker
27*6236dae4SAndroid Build Coastguard Worker# DESCRIPTION
28*6236dae4SAndroid Build Coastguard Worker
29*6236dae4SAndroid Build Coastguard WorkerThis function can be called from any thread and it wakes up a sleeping
30*6236dae4SAndroid Build Coastguard Workercurl_multi_poll(3) call that is currently (or is about to be) waiting
31*6236dae4SAndroid Build Coastguard Workerfor activity or a timeout.
32*6236dae4SAndroid Build Coastguard Worker
33*6236dae4SAndroid Build Coastguard WorkerIf the function is called when there is no curl_multi_poll(3) call, it
34*6236dae4SAndroid Build Coastguard Workercauses the next call to return immediately.
35*6236dae4SAndroid Build Coastguard Worker
36*6236dae4SAndroid Build Coastguard WorkerCalling this function only guarantees to wake up the current (or the next if
37*6236dae4SAndroid Build Coastguard Workerthere is no current) curl_multi_poll(3) call, which means it is possible
38*6236dae4SAndroid Build Coastguard Workerthat multiple calls to this function wake up the same waiting operation.
39*6236dae4SAndroid Build Coastguard Worker
40*6236dae4SAndroid Build Coastguard WorkerThis function has no effect on curl_multi_wait(3) calls.
41*6236dae4SAndroid Build Coastguard Worker
42*6236dae4SAndroid Build Coastguard Worker# %PROTOCOLS%
43*6236dae4SAndroid Build Coastguard Worker
44*6236dae4SAndroid Build Coastguard Worker# EXAMPLE
45*6236dae4SAndroid Build Coastguard Worker
46*6236dae4SAndroid Build Coastguard Worker~~~c
47*6236dae4SAndroid Build Coastguard Workerextern int time_to_die(void);
48*6236dae4SAndroid Build Coastguard Workerextern int set_something_to_signal_thread_1_to_exit(void);
49*6236dae4SAndroid Build Coastguard Workerextern int decide_to_stop_thread1();
50*6236dae4SAndroid Build Coastguard Worker
51*6236dae4SAndroid Build Coastguard Workerint main(void)
52*6236dae4SAndroid Build Coastguard Worker{
53*6236dae4SAndroid Build Coastguard Worker  CURL *easy;
54*6236dae4SAndroid Build Coastguard Worker  CURLM *multi;
55*6236dae4SAndroid Build Coastguard Worker  int still_running;
56*6236dae4SAndroid Build Coastguard Worker
57*6236dae4SAndroid Build Coastguard Worker  /* add the individual easy handle */
58*6236dae4SAndroid Build Coastguard Worker  curl_multi_add_handle(multi, easy);
59*6236dae4SAndroid Build Coastguard Worker
60*6236dae4SAndroid Build Coastguard Worker  /* this is thread 1 */
61*6236dae4SAndroid Build Coastguard Worker  do {
62*6236dae4SAndroid Build Coastguard Worker    CURLMcode mc;
63*6236dae4SAndroid Build Coastguard Worker    int numfds;
64*6236dae4SAndroid Build Coastguard Worker
65*6236dae4SAndroid Build Coastguard Worker    mc = curl_multi_perform(multi, &still_running);
66*6236dae4SAndroid Build Coastguard Worker
67*6236dae4SAndroid Build Coastguard Worker    if(mc == CURLM_OK) {
68*6236dae4SAndroid Build Coastguard Worker      /* wait for activity, timeout or wakeup */
69*6236dae4SAndroid Build Coastguard Worker      mc = curl_multi_poll(multi, NULL, 0, 10000, &numfds);
70*6236dae4SAndroid Build Coastguard Worker    }
71*6236dae4SAndroid Build Coastguard Worker
72*6236dae4SAndroid Build Coastguard Worker    if(time_to_die())
73*6236dae4SAndroid Build Coastguard Worker      return 1;
74*6236dae4SAndroid Build Coastguard Worker
75*6236dae4SAndroid Build Coastguard Worker  } while(still_running);
76*6236dae4SAndroid Build Coastguard Worker
77*6236dae4SAndroid Build Coastguard Worker  curl_multi_remove_handle(multi, easy);
78*6236dae4SAndroid Build Coastguard Worker
79*6236dae4SAndroid Build Coastguard Worker  /* this is thread 2 */
80*6236dae4SAndroid Build Coastguard Worker
81*6236dae4SAndroid Build Coastguard Worker  if(decide_to_stop_thread1()) {
82*6236dae4SAndroid Build Coastguard Worker
83*6236dae4SAndroid Build Coastguard Worker    set_something_to_signal_thread_1_to_exit();
84*6236dae4SAndroid Build Coastguard Worker
85*6236dae4SAndroid Build Coastguard Worker    curl_multi_wakeup(multi);
86*6236dae4SAndroid Build Coastguard Worker  }
87*6236dae4SAndroid Build Coastguard Worker}
88*6236dae4SAndroid Build Coastguard Worker~~~
89*6236dae4SAndroid Build Coastguard Worker
90*6236dae4SAndroid Build Coastguard Worker# %AVAILABILITY%
91*6236dae4SAndroid Build Coastguard Worker
92*6236dae4SAndroid Build Coastguard Worker# RETURN VALUE
93*6236dae4SAndroid Build Coastguard Worker
94*6236dae4SAndroid Build Coastguard WorkerCURLMcode type, general libcurl multi interface error code.
95