> We use libev in Linux (2.6.35 on big/small endian ARM) for a simple > network client application where we want to timeout connect() attempts. > > http://www.unixguide.net/network/socketfaq/3.5.shtml > > For this purpose we use the following construct in a libev callback. > > timeout = NULL_TIMER; > timeout.it_value.tv_sec = 10; > setitimer(ITIMER_REAL, &timeout, NULL); > if (connect (...) == -1) { ... } > timeout = NULL_TIMER; > setitimer (ITIMER_REAL, &timeout, NULL); > > Is this OK for use with libev, or do you have any other recommendation? > Basically we're a bit concerned if it conflicts with the internal timer > implementation, or event loop, in libev.
This is probably not the right thing to do with libev (as you are supposed to be in a blocking loop managed by ev_loop()). Instead, you should create a non-blocking client TCP socket, an ev_write and an ev_timer, and add both to the loop. Something like this (kinda pseudo-code): --------8<----------8<----------8<----------8<----------8<----------8<------- void connect_handler(struct ev_loop *loop, struct ev_io *watcher, int events) { // socket is connected: kill the associated timer and proceed } void timeout(struct ev_loop *loop, struct ev_timer *watcher, int events) { // connection timeout occurred: close the associated socket and bail } ev_loop *loop; ev_io write_watcher; ev_timer timeout_watcher; int client; client = socket(...); set_non_blocking(client); ev_io_init(&write_watcher, connect_handler, client, EV_WRITE); ev_timer_init(&timeout_watcher, timeout_handler, 5.0, 0); ev_timer_start(loop, &timeout_watcher); connect(client, ...); ev_loop(loop, 0); --------8<----------8<----------8<----------8<----------8<----------8<------- Of course, this code is sub-optimal if you intend to open a large number of connections from the same loop. Also, you need to tie the 2 watchers (write and timeout) together via some sort of allocated structure and offsetof magic (see libev examples for more info). Regards, Pierre-Yves _______________________________________________ libev mailing list libev@lists.schmorp.de http://lists.schmorp.de/cgi-bin/mailman/listinfo/libev