+ timeout_set(&mesh->loop, data, &(struct timeval){mesh->pingtimeout, rand() % 100000});
+}
+
+// devclass asc, last_successfull_connection desc
+static int node_compare_devclass_asc_lsc_desc(const void *a, const void *b)
+{
+ const node_t *na = a, *nb = b;
+
+ if(na->devclass < nb->devclass)
+ { return -1; }
+
+ if(na->devclass > nb->devclass)
+ { return 1; }
+
+ if(na->last_successfull_connection == nb->last_successfull_connection)
+ return 0;
+
+ if(na->last_successfull_connection == 0 || na->last_successfull_connection > nb->last_successfull_connection)
+ return -1;
+
+ if(nb->last_successfull_connection == 0 || na->last_successfull_connection < nb->last_successfull_connection)
+ return 1;
+
+ if(na < nb)
+ return -1;
+
+ if(na > nb)
+ return 1;
+
+ return 0;
+}
+
+// last_successfull_connection desc
+static int node_compare_lsc_desc(const void *a, const void *b)
+{
+ const node_t *na = a, *nb = b;
+
+ if(na->last_successfull_connection == nb->last_successfull_connection)
+ return 0;
+
+ if(na->last_successfull_connection == 0 || na->last_successfull_connection > nb->last_successfull_connection)
+ return -1;
+
+ if(nb->last_successfull_connection == 0 || na->last_successfull_connection < nb->last_successfull_connection)
+ return 1;
+
+ if(na < nb)
+ return -1;
+
+ if(na > nb)
+ return 1;
+
+ return 0;
+}
+
+// devclass desc
+static int node_compare_devclass_desc(const void *a, const void *b)
+{
+ const node_t *na = a, *nb = b;
+
+ if(na->devclass < nb->devclass)
+ { return -1; }
+
+ if(na->devclass > nb->devclass)
+ { return 1; }
+
+ if(na < nb)
+ return -1;
+
+ if(na > nb)
+ return 1;
+
+ return 0;