X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=src%2Fntp.cpp;h=64fd46c90b3a5df1deabc985b75edea858efbff4;hb=75744e6526193604bfbcc6be3a3793315556f12c;hp=7118af90527ec149f1a365baea143b11cc046916;hpb=388835f3cc1346477a6b500786fb283d3a2712cc;p=novacoin.git diff --git a/src/ntp.cpp b/src/ntp.cpp index 7118af9..64fd46c 100644 --- a/src/ntp.cpp +++ b/src/ntp.cpp @@ -52,7 +52,7 @@ typedef struct { } l_fp; -inline void Ntp2Unix(uint32_t &n, time_t &u) { +inline void Ntp2Unix(const uint32_t &n, time_t &u) { // Ntp's time scale starts in 1900, Unix in 1970. u = n - 0x83aa7e80; // 2208988800 1970 - 1900 in seconds @@ -280,8 +280,9 @@ std::string NtpServers[162] = { // ... To be continued }; -bool InitWithHost(std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { - sockfd = -1; +bool InitWithHost(const std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliaddr) { + + sockfd = INVALID_SOCKET; std::vector vIP; bool fRet = LookupHost(strHostName.c_str(), vIP, 10, true); @@ -295,7 +296,7 @@ bool InitWithHost(std::string &strHostName, SOCKET &sockfd, socklen_t &servlen, bool found = false; for(unsigned int i = 0; i < vIP.size(); i++) { - if ((found = vIP[i].GetInAddr(&servaddr.sin_addr))) { + if ((found = vIP[i].GetInAddr(&servaddr.sin_addr)) != false) { break; } } @@ -333,6 +334,8 @@ bool InitWithRandom(SOCKET &sockfd, socklen_t &servlen, struct sockaddr *pcliadd } int64_t DoReq(SOCKET sockfd, socklen_t servlen, struct sockaddr cliaddr) { + + #ifdef WIN32 u_long nOne = 1; if (ioctlsocket(sockfd, FIONBIO, &nOne) == SOCKET_ERROR) { @@ -344,8 +347,11 @@ int64_t DoReq(SOCKET sockfd, socklen_t servlen, struct sockaddr cliaddr) { return -2; } + struct timeval timeout = {10, 0}; struct pkt *msg = new pkt; struct pkt *prt = new pkt; + time_t seconds_transmit; + int len = 48; msg->li_vn_mode=227; msg->stratum=0; @@ -363,29 +369,30 @@ int64_t DoReq(SOCKET sockfd, socklen_t servlen, struct sockaddr cliaddr) { msg->xmt.Ul_i.Xl_i=0; msg->xmt.Ul_f.Xl_f=0; - int len=48; int retcode = sendto(sockfd, (char *) msg, len, 0, &cliaddr, servlen); if (retcode < 0) { printf("sendto() failed: %d\n", retcode); - return -3; + seconds_transmit = -3; + goto _end; } fd_set fdset; - struct timeval timeout = {10, 0}; FD_ZERO(&fdset); FD_SET(sockfd, &fdset); retcode = select(sockfd + 1, &fdset, NULL, NULL, &timeout); if (retcode <= 0) { printf("recvfrom() error\n"); - return -4; + seconds_transmit = -4; + goto _end; } recvfrom(sockfd, (char *) msg, len, 0, NULL, NULL); ntohl_fp(&msg->xmt, &prt->xmt); - time_t seconds_transmit; Ntp2Unix(prt->xmt.Ul_i.Xl_ui, seconds_transmit); + _end: + delete msg; delete prt; @@ -404,12 +411,12 @@ int64_t NtpGetTime(CNetAddr& ip) { ip = CNetAddr(((sockaddr_in *)&cliaddr)->sin_addr); int64_t nTime = DoReq(sockfd, servlen, cliaddr); - closesocket(sockfd); + CloseSocket(sockfd); return nTime; } -int64_t NtpGetTime(std::string &strHostName) +int64_t NtpGetTime(const std::string &strHostName) { struct sockaddr cliaddr; @@ -421,7 +428,7 @@ int64_t NtpGetTime(std::string &strHostName) int64_t nTime = DoReq(sockfd, servlen, cliaddr); - closesocket(sockfd); + CloseSocket(sockfd); return nTime; } @@ -438,7 +445,7 @@ int64_t GetNtpOffset() { } void ThreadNtpSamples(void* parg) { - const int64_t nMaxOffset = 86400; // Not a real limit, just sanity threshold. + const int64_t nMaxOffset = nOneDay; // Not a real limit, just sanity threshold. printf("Trying to find NTP server at localhost...\n");