X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fmeshlink.c;h=8266633269845631160fbf9ee5641d46e1f7bd5f;hb=ea17ede077e84f88c7f20e9053b38086583ab635;hp=4538548d97a17baf46739925b983d8876c4995b6;hpb=8c5bd53b91c720acf34d770e0f09d2b207b068eb;p=meshlink diff --git a/src/meshlink.c b/src/meshlink.c index 4538548d..82666332 100644 --- a/src/meshlink.c +++ b/src/meshlink.c @@ -699,6 +699,20 @@ static bool ecdsa_keygen(meshlink_handle_t *mesh) { return true; } +static struct timeval idle(event_loop_t *loop, void *data) { + meshlink_handle_t *mesh = data; + int t, tmin = -1; + for splay_each(node_t, n, mesh->nodes) { + if(!n->utcp) + continue; + t = utcp_timeout(n->utcp); + if(t >= 0 && t < tmin) + tmin = t; + } + struct timeval tv = {.tv_sec = t}; + return tv; +} + static bool meshlink_setup(meshlink_handle_t *mesh) { if(mkdir(mesh->confbase, 0777) && errno != EEXIST) { logger(mesh, MESHLINK_DEBUG, "Could not create directory %s: %s\n", mesh->confbase, strerror(errno)); @@ -845,6 +859,8 @@ meshlink_handle_t *meshlink_open_with_size(const char *confbase, const char *nam return NULL; } + idle_set(&mesh->loop, idle, mesh); + logger(NULL, MESHLINK_DEBUG, "meshlink_open returning\n"); return mesh; }