최대한 비슷하게 만들었습니다.
| 코드: |
|
/* Copyright (c) 2002 Information Equipment co.,LTD. All Right Reserved. Code by JaeHyuk Cho <minzkn@infoeq.co.kr> This example !!! - Simple is best. - Reference RFC 868 -> See http://rfc.sunsite.dk */ #if defined(WIN32) #include <windows.h> #else #include <stdio.h> #include <string.h> #include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <time.h> #include <sys/socket.h> #include <netinet/in.h> #include <netdb.h> #endif #define DEF_RFC_868_CORRESPOND_VALUE (2208988800lu) /* 00:00:00 1 JAN 1970 GMT */ #define DEF_RFC_868_TIMESERVER_TCP_PORT (37) #define DEF_RFC_868_TIMESERVER_UDP_PORT (37) int main(int s_Argc, char *s_Argv[]); static time_t MZ_GetRemoteTime(const char *s_TimeServer) { unsigned long s_Return = 0lu; int s_Socket; struct sockaddr_in s_SocketAddress_In; struct hostent *s_HostEntry; s_HostEntry = gethostbyname(s_TimeServer); if(s_HostEntry) { memset((void *)(&s_SocketAddress_In), 0, sizeof(s_SocketAddress_In)); s_SocketAddress_In.sin_family = AF_INET; s_SocketAddress_In.sin_port = htons(DEF_RFC_868_TIMESERVER_TCP_PORT); memcpy((void *)(&s_SocketAddress_In.sin_addr), (void *)(s_HostEntry->h_addr), sizeof(s_SocketAddress_In.sin_addr)); s_Socket = socket(AF_INET, SOCK_STREAM, 0); if(s_Socket >= 0) { /* TODO: Tick save */ if(connect(s_Socket, (struct sockaddr *)&s_SocketAddress_In, sizeof(s_SocketAddress_In)) >= 0) { if(recv(s_Socket, &s_Return, sizeof(s_Return), 0) == sizeof(s_Return)) { s_Return = ntohl(s_Return) - DEF_RFC_868_CORRESPOND_VALUE; /* Time entry 00:00:00 1 JAN 1970 GMT */ /* TODO: s_Return += (Tick value / 2) */ } else fprintf(stderr, "Can not recv time_t from \"%s\" !\n", s_TimeServer); } else fprintf(stderr, "Can not connect to timeserver \"%s\" !\n", s_TimeServer); #if defined(WIN32) closesocket(s_Socket); #else close(s_Socket); #endif } else fprintf(stderr, "Can not open socket !\n"); } else fprintf(stderr, "Can not get host by name !\n"); return((time_t)s_Return); } int main(int s_Argc, char *s_Argv[]) { char *s_TimeServer = "time.bora.net"; time_t s_RemoteTime; fprintf(stdout, "rdate v0.0.1 - Code by JaeHyuk Cho <minzkn@infoeq.co.kr>\n\n"); if(s_Argc > 1)s_TimeServer = s_Argv[1]; fprintf(stdout, "Timeserver is %s\n", s_TimeServer); s_RemoteTime = MZ_GetRemoteTime(s_TimeServer); if(s_RemoteTime) { fprintf(stdout, "TIME>> %s\n", ctime(&s_RemoteTime)); /* TODO: Adjust clock delay */ /* stime(&s_RemoteTime); */ /* Save time */ } else fprintf(stderr, "Can not sync from \"%s\" !\n", s_TimeServer); return(0); } /* End of source */ |

글
댓글을 달아 주세요
댓글 RSS 주소 : http://blog.minzkn.com/rss/comment/68댓글 ATOM 주소 : http://blog.minzkn.com/atom/comment/68