68 #include <event2/event.h> 74 #define MSG_OUT stdout 117 timeout.
tv_sec = timeout_ms/1000;
118 timeout.
tv_usec = (timeout_ms%1000)*1000;
119 fprintf(
MSG_OUT,
"multi_timer_cb: Setting timeout to %ld ms\n", timeout_ms);
146 default: s =
"CURLM_unknown";
189 static void event_cb(
int fd,
short kind,
void *userp)
213 static void timer_cb(
int fd,
short kind,
void *userp)
254 event_add(f->
ev, NULL);
265 setsock(fdp, s, easy, action, g);
274 const char *whatstr[]={
"none",
"IN",
"OUT",
"INOUT",
"REMOVE" };
277 "socket callback: s=%d e=%p what=%s ", s, e, whatstr[what]);
289 "Changing action from %s to %s\n",
290 whatstr[fdp->
action], whatstr[what]);
302 size_t realsize = size * nmemb;
311 static int prog_cb(
void *
p,
double dltotal,
double dlnow,
double ult,
350 "Adding easy %p to multi %p (%s)\n", conn->
easy, g->
multi, url);
359 static void fifo_cb(
int fd,
short event,
void *arg)
370 rv = fscanf(g->
input,
"%1023s%n", s, &n);
381 static const char *
fifo =
"hiper.fifo";
388 if(lstat (
fifo, &st) == 0) {
389 if((st.st_mode & S_IFMT) == S_IFREG) {
396 if(mkfifo (
fifo, 0600) == -1) {
400 sockfd = open(
fifo, O_RDWR | O_NONBLOCK, 0);
405 g->
input = fdopen(sockfd,
"r");
420 int main(
int argc,
char **argv)
427 g.
evbase = event_base_new();
441 event_base_dispatch(g.
evbase);
447 event_base_free(g.
evbase);
static int init_fifo(GlobalInfo *g)
struct event * timer_event
struct ev_timer timer_event
CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *curl_handle)
static void addsock(curl_socket_t s, CURL *easy, int action, GlobalInfo *g)
int stat(const char *path, struct stat *buffer)
static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
static void mcode_or_die(const char *where, CURLMcode code)
CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd, void *sockp)
int main(int argc, char **argv)
static void clean_fifo(GlobalInfo *g)
UNITTEST_START char * ptr
struct _ConnInfo ConnInfo
struct event_base * evbase
static void setsock(SockInfo *f, curl_socket_t s, CURL *e, int act, GlobalInfo *g)
struct event * fifo_event
static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
struct _GlobalInfo GlobalInfo
#define curl_easy_setopt(handle, option, value)
CURL_EXTERN CURLM * curl_multi_init(void)
static void event_cb(int fd, short kind, void *userp)
static int prog_cb(void *p, double dltotal, double dlnow, double ult, double uln)
#define curl_multi_setopt(handle, opt, param)
#define curl_easy_getinfo(handle, info, arg)
struct _SockInfo SockInfo
CURL_EXTERN CURL * curl_easy_init(void)
CURL_EXTERN void curl_easy_cleanup(CURL *curl)
static void check_multi_info(GlobalInfo *g)
static size_t write_cb(void *ptr, size_t size, size_t nmemb, void *data)
static void remsock(SockInfo *f)
CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *curl_handle)
#define CURL_SOCKET_TIMEOUT
char error[CURL_ERROR_SIZE]
CURL_EXTERN CURLMsg * curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue)
static void new_conn(char *url, GlobalInfo *g)
static void timer_cb(int fd, short kind, void *userp)
static CURL * easy[MAX_EASY_HANDLES]
static void fifo_cb(int fd, short event, void *arg)
CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle, curl_socket_t s, int ev_bitmask, int *running_handles)
CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle)
#define calloc(nbelem, size)