-#include <sys/time.h>
#ifdef WIN32
#include <winsock2.h>
#else
#include <sys/socket.h>
+#include <sys/time.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
uint8_t mac[5 * sizeof(uint32_t)]; /* mac */
};
-int nServersCount = 65;
+int nServersCount = 103;
-std::string NtpServers[65] = {
+std::string NtpServers[103] = {
// Microsoft
"time.windows.com",
// Google
"time1.google.com",
"time2.google.com",
+ "time3.google.com",
+ "time4.google.com",
// Russian Federation
"ntp.ix.ru",
- "0.ru.pool.ntp.org",
- "1.ru.pool.ntp.org",
- "2.ru.pool.ntp.org",
- "3.ru.pool.ntp.org",
"ntp1.stratum2.ru",
"ntp2.stratum2.ru",
"ntp3.stratum2.ru",
"ntp2.niiftri.irkutsk.ru",
"vniiftri.khv.ru",
"vniiftri2.khv.ru",
+ "ntp0.zenon.net",
+ "ntp.mobatime.ru",
+ "0.ru.pool.ntp.org",
+ "1.ru.pool.ntp.org",
+ "2.ru.pool.ntp.org",
+ "3.ru.pool.ntp.org",
// United States
"nist1-pa.ustiming.org",
"ntp1.bu.edu",
"ntp2.bu.edu",
"ntp3.bu.edu",
+ "0.us.pool.ntp.org",
+ "1.us.pool.ntp.org",
+ "2.us.pool.ntp.org",
+ "3.us.pool.ntp.org",
// South Africa
"ntp1.meraka.csir.co.za",
"ntp.time.org.za",
"ntp1.meraka.csir.co.za",
"ntp2.meraka.csir.co.za",
+ "0.za.pool.ntp.org",
+ "1.za.pool.ntp.org",
+ "2.za.pool.ntp.org",
+ "3.za.pool.ntp.org",
// Italy
"ntp1.inrim.it",
"ntp2.inrim.it",
+ "0.it.pool.ntp.org",
+ "1.it.pool.ntp.org",
+ "2.it.pool.ntp.org",
+ "3.it.pool.ntp.org",
+
+ // Netherlands
+ "ntp0.nl.net",
+ "ntp1.nl.net",
+ "ntp2.nl.net",
+ "ntp.utwente.nl",
+ "0.nl.pool.ntp.org",
+ "1.nl.pool.ntp.org",
+ "2.nl.pool.ntp.org",
+ "3.nl.pool.ntp.org",
+
+ // United Kingdom
+ "ntp2d.mcc.ac.uk",
+ "ntp2c.mcc.ac.uk",
+ "ntp.exnet.com",
+ "ntp.cis.strath.ac.uk",
+ "ntppub.le.ac.uk",
+ "0.uk.pool.ntp.org",
+ "1.uk.pool.ntp.org",
+ "2.uk.pool.ntp.org",
+ "3.uk.pool.ntp.org",
+
+ // Japan
+ "ntp.nict.jp",
+ "0.jp.pool.ntp.org",
+ "1.jp.pool.ntp.org",
+ "2.jp.pool.ntp.org",
+ "3.jp.pool.ntp.org",
// ... To be continued
};
return -3;
}
- retcode = 0;
- int nWait = 0;
+ fd_set fdset;
+ struct timeval timeout = {5, 0};
+ FD_ZERO(&fdset);
+ FD_SET(sockfd, &fdset);
- while(retcode <= 0) {
- Sleep(1000);
- retcode = recvfrom(sockfd, (char *) msg, len, 0, NULL, NULL);
-
- if (nWait > 4) {
- printf("recvfrom() timeout");
- return -4;
- }
-
- nWait++;
+ retcode = select(sockfd + 1, &fdset, NULL, NULL, &timeout);
+ if (retcode <= 0)
+ {
+ printf("recvfrom() error");
+ return -4;
}
+ recvfrom(sockfd, (char *) msg, len, 0, NULL, NULL);
+
ntohl_fp(&msg->rec, &prt->rec);
ntohl_fp(&msg->xmt, &prt->xmt);