+
+ bool close_all_connections = false;
+
+ /*
+ timeout_hanlder will start after 30 seconds from start of tincd
+ hold information about the elapsed time since last time the handler
+ has been run
+ */
+ long sleep_time = now.tv_sec - last_periodic_run_time.tv_sec;
+ /*
+ It seems that finding sane default value is harder than expected
+ Since we send every second a UDP packet to make holepunching work
+ And default UDP state expire on firewalls is between 15-30 seconds
+ we drop all connections after 60 Seconds - UDPDiscoveryTimeout=30
+ by default
+ */
+ if (sleep_time > 2 * udp_discovery_timeout) {
+ logger(DEBUG_ALWAYS, LOG_ERR, "Awaking from dead after %ld seconds of sleep", sleep_time);
+ /*
+ Do not send any packets to tinc after we wake up.
+ The other node probably closed our connection but we still
+ are holding context information to them. This may happen on
+ laptops or any other hardware which can be suspended for some time.
+ Sending any data to node that wasn't expecting it will produce
+ annoying and misleading errors on the other side about failed signature
+ verification and or about missing sptps context
+ */
+ close_all_connections = true;
+ }
+ last_periodic_run_time = now;
+