X-Git-Url: http://git.meshlink.io/?p=meshlink;a=blobdiff_plain;f=src%2Fnet.c;h=c3937307ae477065169ab4b14cc9e60ab83f252a;hp=b5705a471b198dde06bed1792d0208a835490a1d;hb=9457a9cdb66473ad36923845b0f5fb359eec2ef0;hpb=b1cae6a2011f704dc4d3b02972def561d5c6bcb9 diff --git a/src/net.c b/src/net.c index b5705a47..c3937307 100644 --- a/src/net.c +++ b/src/net.c @@ -40,6 +40,7 @@ static inline int min(int a, int b) { #endif static const int default_timeout = 5; +static const int default_interval = 60; /* Terminate a connection: @@ -113,6 +114,7 @@ static void timeout_handler(event_loop_t *loop, void *data) { for list_each(connection_t, c, mesh->connections) { int pingtimeout = c->node ? mesh->dev_class_traits[c->node->devclass].pingtimeout : default_timeout; + int pinginterval = c->node ? mesh->dev_class_traits[c->node->devclass].pinginterval : default_interval; // Also make sure that if outstanding key requests for the UDP counterpart of a connection has timed out, we restart it. if(c->node) { @@ -125,7 +127,7 @@ static void timeout_handler(event_loop_t *loop, void *data) { if(c->status.active) { if(c->status.pinged) { logger(mesh, MESHLINK_INFO, "%s didn't respond to PING in %ld seconds", c->name, (long)mesh->loop.now.tv_sec - c->last_ping_time); - } else if(c->last_ping_time + mesh->dev_class_traits[c->node->devclass].pinginterval <= mesh->loop.now.tv_sec) { + } else if(c->last_ping_time + pinginterval <= mesh->loop.now.tv_sec) { send_ping(mesh, c); continue; } else { @@ -702,17 +704,19 @@ int main_loop(meshlink_handle_t *mesh) { //Add signal handler mesh->datafromapp.signum = 0; - signal_add(&(mesh->loop), &(mesh->datafromapp), (signal_cb_t)meshlink_send_from_queue, mesh, mesh->datafromapp.signum); + signal_add(&mesh->loop, &mesh->datafromapp, meshlink_send_from_queue, mesh, mesh->datafromapp.signum); - if(!event_loop_run(&(mesh->loop), &(mesh->mesh_mutex))) { + if(!event_loop_run(&mesh->loop, &mesh->mesh_mutex)) { logger(mesh, MESHLINK_ERROR, "Error while waiting for input: %s", strerror(errno)); abort(); + signal_del(&mesh->loop, &mesh->datafromapp); timeout_del(&mesh->loop, &mesh->periodictimer); timeout_del(&mesh->loop, &mesh->pingtimer); return 1; } + signal_del(&mesh->loop, &mesh->datafromapp); timeout_del(&mesh->loop, &mesh->periodictimer); timeout_del(&mesh->loop, &mesh->pingtimer);