def one_time_sync(server, callback=None): """ Synchronize the system time with a given NTP server. Note that this function is blocking and will not return until the time gets synced or querying server fails (may take some time before timeouting). :param server: NTP server :param callback: callback function to run after sync or failure :type callback: a function taking one boolean argument (success) :return: True if the sync was successful, False otherwise """ client = ntplib.NTPClient() try: results = client.request(server) isys.set_system_time(int(results.tx_time)) success = True except ntplib.NTPException: success = False except socket.gaierror: success = False if callback is not None: callback(success) return success