Anyone know if the git repository for the libevent book has changed or gone away? I tried updating using "git pull" as I already had a previous copy that used to update fine the same way, but now I am getting: "fatal: The remote end hung up unexpectedly". origin in my .git/config is "git://git.torproject.org/~nickm/git/lebook".
On Fri, Jan 29, 2010 at 7:00 AM, Jonas Romfelt <[email protected]> wrote: > Have a look at the libevent2 reference manual: > http://www.wangafu.net/~nickm/libevent-book/Ref3_eventloop.html, it'll > explain most stuff in detail and with really great examples. > > cheers, > Jonas Romfelt > > > 2010/1/29 Donghua Xu <[email protected]>: >> Thanks Jonas. I fixed the code like you suggested, using >> event_base_loop(global_event_base, 0) and evtimer_add(dummy_event, >> &five_seconds). Now the dummy_callback() is indeed called, but the >> event_base_loop() exited with a failed status, as show below: >> >> ***entering main() >> ***entering EventLoop() >> ***dummy_event=0x60e690 >> ***in dummy_callback() >> event_base_loop() failed >> ***exiting EventLoop() >> ***exiting main() >> >> Any idea what might be wrong? Following is the current code: >> >> #include <stdlib.h> >> #include <stdio.h> >> #include "event2/event.h" >> >> struct event_base *global_event_base; >> >> static void dummy_callback(evutil_socket_t fd, short what, void *arg) >> { >> printf("***in dummy_callback()\n"); >> } >> >> static void* EventLoop(void *arg) >> { >> printf("***entering EventLoop()\n"); >> global_event_base = event_base_new(); >> if (!global_event_base) { >> printf("event_base_new() failed\n"); >> exit (-1); >> } >> >> struct timeval five_seconds = {5,0}; >> struct event *dummy_event = >> evtimer_new(global_event_base, dummy_callback, arg); >> >> printf("***dummy_event=%p\n", dummy_event); >> >> evtimer_add(dummy_event, &five_seconds); >> >> // int ret = event_base_loop(global_event_base, EVLOOP_NONBLOCK); >> int ret = event_base_loop(global_event_base, 0); >> if (ret!=0) >> printf("event_base_loop() failed\n"); >> >> >> printf("***exiting EventLoop()\n"); >> return NULL; >> } >> >> int main() >> { >> printf("***entering main()\n"); >> EventLoop(NULL); >> printf("***exiting main()\n"); >> fflush(stdout); >> return 0; >> } >> >> >> >> On Fri, Jan 29, 2010 at 2:45 AM, Jonas Romfelt <[email protected]> wrote: >>> >>> Hi, >>> >>> if I'm not mistaken your call to event_base_loop() will not wait for >>> the timer event you added to expire beacuse the EVLOOP_NONBLOCK flag >>> is set. Simply because your 5 seconds timer has not yet expired when >>> the event_base_loop() is called. >>> >>> Try: event_base_loop(global_event_base, 0) or >>> event_base_loop(global_event_base, EVLOOP_ONCE) if you want to exit >>> the loop after the timer expired. >>> >>> Also, you could change event_add(dummy_event, &five_seconds) to >>> evtimer_add(dummy_event, &five_seconds). Event though it's just a >>> macro you never know when something under the API may change... >>> >>> cheers, >>> Jonas Romfelt >>> >>> >>> >>> 2010/1/29 Donghua Xu <[email protected]> >>> > >>> > Hi, I just wrote a simple program trying to use the timeout event in >>> > libevent 2.0.3-alpha. The source code is at the end of the email. I'm >>> > expecting to see a print out of "***in dummy_callback()", but this line >>> > does >>> > not show up at all. What I am seeing is only: >>> > >>> > ***entering main() >>> > ***entering EventLoop() >>> > ***dummy_event=0x60e690 >>> > ***exiting EventLoop() >>> > ***exiting main() >>> > >>> > What am I doing wrong in the following source code? A lot of thanks in >>> > advance... >>> > >>> > >>> > >>> > #include <stdlib.h> >>> > #include <stdio.h> >>> > #include "event2/event.h" >>> > >>> > struct event_base *global_event_base; >>> > >>> > static void dummy_callback(evutil_socket_t fd, short what, void *arg) >>> > { >>> > printf("***in dummy_callback()\n"); >>> > } >>> > >>> > static void* EventLoop(void *arg) >>> > { >>> > printf("***entering EventLoop()\n"); >>> > global_event_base = event_base_new(); >>> > if (!global_event_base) { >>> > printf("event_base_new() failed\n"); >>> > exit (-1); >>> > } >>> > >>> > struct timeval five_seconds = {5,0}; >>> > struct event *dummy_event = >>> > evtimer_new(global_event_base, dummy_callback, arg); >>> > >>> > printf("***dummy_event=%p\n", dummy_event); >>> > >>> > event_add(dummy_event, &five_seconds); >>> > >>> > int ret = event_base_loop(global_event_base, EVLOOP_NONBLOCK); >>> > if (ret!=0) >>> > printf("event_base_loop() failed\n"); >>> > >>> > >>> > printf("***exiting EventLoop()\n"); >>> > return NULL; >>> > } >>> > >>> > int main() >>> > { >>> > printf("***entering main()\n"); >>> > EventLoop(NULL); >>> > printf("***exiting main()\n"); >>> > fflush(stdout); >>> > return 0; >>> > } >>> > >>> *********************************************************************** >>> To unsubscribe, send an e-mail to [email protected] with >>> unsubscribe libevent-users in the body. >> >> > *********************************************************************** > To unsubscribe, send an e-mail to [email protected] with > unsubscribe libevent-users in the body. > *********************************************************************** To unsubscribe, send an e-mail to [email protected] with unsubscribe libevent-users in the body.
