亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ntpclient.c

?? ntpclient是通過網絡進行系統時間校準的client端程序。從而使多個終端能夠保證時間同步性。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * ntpclient.c - NTP client * * Copyright 1997, 1999, 2000  Larry Doolittle  <larry@doolittle.boa.org> * Last hack: 2 December, 2000 * *  This program is free software; you can redistribute it and/or modify *  it under the terms of the GNU General Public License (Version 2, *  June 1991) as published by the Free Software Foundation.  At the *  time of writing, that license was published by the FSF with the URL *  http://www.gnu.org/copyleft/gpl.html, and is incorporated herein by *  reference. * *  This program is distributed in the hope that it will be useful, *  but WITHOUT ANY WARRANTY; without even the implied warranty of *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the *  GNU General Public License for more details. * *  Possible future improvements: *      - Double check that the originate timestamp in the received packet *        corresponds to what we sent. *      - Verify that the return packet came from the host we think *        we're talking to.  Not necessarily useful since UDP packets *        are so easy to forge. *      - Complete phase locking code. *      - Write more documentation  :-( * *  Compile with -D_PRECISION_SIOCGSTAMP if your machine really has it. *  There are patches floating around to add this to Linux, but *  usually you only get an answer to the nearest jiffy. *  Hint for Linux hacker wannabes: look at the usage of get_fast_time() *  in net/core/dev.c, and its definition in kernel/time.c . * *  If the compile gives you any flak, check below in the section *  labelled "XXXX fixme - non-automatic build configuration". */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/socket.h>#include <netinet/in.h>#include <netdb.h>#include <arpa/inet.h>#include <time.h>#include <unistd.h>#include <fcntl.h>#include <errno.h>#ifdef _PRECISION_SIOCGSTAMP#include <sys/ioctl.h>#endif#define ENABLE_DEBUG#define HOSTNAME_MAX_LEN        64extern char *optarg;/* XXXX fixme - non-automatic build configuration */#ifdef linux#include <sys/utsname.h>#include <sys/time.h>typedef u_int32_t __u32;#include <sys/timex.h>#else#define main ntpclientextern struct hostent *gethostbyname(const char *name);extern int h_errno;#define herror(hostname) \	fprintf(stderr,"Error %d looking up hostname %s\n", h_errno,hostname)typedef uint32_t __u32;#endif#define JAN_1970        0x83aa7e80      /* 2208988800 1970 - 1900 in seconds */#define NTP_PORT "123"/* How to multiply by 4294.967296 quickly (and not quite exactly) * without using floating point or greater than 32-bit integers. * If you want to fix the last 12 microseconds of error, add in * (2911*(x))>>28) */#define NTPFRAC(x) ( 4294*(x) + ( (1981*(x))>>11 ) )/* The reverse of the above, needed if we want to set our microsecond * clock (via settimeofday) based on the incoming time in NTP format. * Basically exact. */#define USEC(x) ( ( (x) >> 12 ) - 759 * ( ( ( (x) >> 10 ) + 32768 ) >> 16 ) )/* Converts NTP delay and dispersion, apparently in seconds scaled * by 65536, to microseconds.  RFC1305 states this time is in seconds, * doesn't mention the scaling. * Should somehow be the same as 1000000 * x / 65536 */#define sec2u(x) ( (x) * 15.2587890625 )struct ntptime {	unsigned int coarse;	unsigned int fine;};void send_packet(int usd, int print_errors);int rfc1305print(char *data, struct ntptime *arrival);int udp_handle(int usd, char *data, int data_len, struct sockaddr *sa_source, int sa_len);/* global variables (I know, bad form, but this is a short program) */char incoming[1500];struct timeval time_of_send;int live=0;int set_clock=0;   /* non-zero presumably needs root privs */int host_count = 0;int current_host = 0;char *host_list[8];struct addrinfo *addr_list = NULL;struct addrinfo *current_addr = NULL;char **global_argv;#ifdef ENABLE_DEBUGint debug=0;#define DEBUG_OPTION "d"#else#define debug 0#define DEBUG_OPTION#endifint contemplate_data(unsigned int absolute, double skew, double errorbar, int freq);int get_current_freq(){	/* OS dependent routine to get the current value of clock frequency.	 */#ifdef linux	struct timex txc;	txc.modes=0;	if (adjtimex(&txc) < 0) {		perror("adjtimex"); exit(1);	}	return txc.freq;#else	return 0;#endif}int set_freq(int new_freq){	/* OS dependent routine to set a new value of clock frequency.	 */#ifdef linux	struct timex txc;	txc.modes = ADJ_FREQUENCY;	txc.freq = new_freq;	if (adjtimex(&txc) < 0) {		perror("adjtimex"); exit(1);	}	return txc.freq;#else	return 0;#endif}int resolv_conf_changed(void){	struct stat st;	static time_t last_mod;	static int last_mod_valid = 0;	int ret;	if (stat("/etc/resolv.conf", &st) < 0) {		last_mod_valid = 0;		return 0;	}	ret = !last_mod_valid || last_mod != st.st_mtime;	last_mod_valid = 1;	last_mod = st.st_mtime;	return ret;}char *make_addr(struct sockaddr *addr){	static char tmp[128];	int port;	switch (addr->sa_family) {	case AF_INET:		inet_ntop(AF_INET, &((struct sockaddr_in *)addr)->sin_addr,			tmp, sizeof(tmp));		port = ((struct sockaddr_in *)addr)->sin_port;		break;	case AF_INET6:		inet_ntop(AF_INET6, &((struct sockaddr_in6 *)addr)->sin6_addr,			tmp, sizeof(tmp));		port = ((struct sockaddr_in6 *)addr)->sin6_port;		break;	default:		tmp[0] = 0;		return tmp;	}	sprintf(tmp + strlen(tmp), ":%d", ntohs(port));	return tmp;}void server_failed(void){	if (current_addr)		current_addr = current_addr->ai_next;}void send_packet(int usd, int print_errors){	__u32 data[12];	struct timeval now;	struct addrinfo *addr;	int res;	struct addrinfo hints;	static int wrapped = 0;	if (!current_addr) {		if (current_host == host_count) {			if (wrapped) {				if (resolv_conf_changed()) {					/* glibc only reads resolv.conf once,					 * so we need to re-exec to pick up					 * the new nameservers */					if (debug)						printf("resolv.conf changed; "								"re-execing\n");					execvp(global_argv[0], global_argv);				}				/* skip this query, continue retrying */				wrapped = 0;				return;			}			wrapped = 1;			current_host = 0;		}		if (addr_list)			freeaddrinfo(addr_list);		memset(&hints, 0, sizeof(hints));		hints.ai_family = AF_INET;		hints.ai_socktype = SOCK_DGRAM;		res = getaddrinfo(host_list[current_host], NTP_PORT, &hints,					&addr_list);		if (res) {			if (print_errors)				fprintf(stderr, "%s: %s\n",						host_list[current_host],						gai_strerror(res));			++current_host;			send_packet(usd, print_errors);			return;		}		current_addr = addr_list;		if (debug)			for (addr = addr_list; addr; addr = addr->ai_next)				printf("adding %s\n", make_addr(addr->ai_addr));		++current_host;		send_packet(usd, print_errors);		return;	}	wrapped = 0;#define LI 0#define VN 3#define MODE 3#define STRATUM 0#define POLL 4 #define PREC -6	if (debug) fprintf(stderr,"Sending to %s...\n",			make_addr(current_addr->ai_addr));	if (sizeof(data) != 48) {		fprintf(stderr,"size error\n");		return;	}	bzero((char*)data,sizeof(data));	data[0] = htonl (		( LI << 30 ) | ( VN << 27 ) | ( MODE << 24 ) |		( STRATUM << 16) | ( POLL << 8 ) | ( PREC & 0xff ) );	data[1] = htonl(1<<16);  /* Root Delay (seconds) */	data[2] = htonl(1<<16);  /* Root Dispersion (seconds) */	gettimeofday(&now,NULL);	data[10] = htonl(now.tv_sec + JAN_1970); /* Transmit Timestamp coarse */	data[11] = htonl(NTPFRAC(now.tv_usec));  /* Transmit Timestamp fine   */	if (sendto(usd,data,48,0,current_addr->ai_addr,				current_addr->ai_addrlen) < 0)		server_failed();	time_of_send=now;}int udp_handle(int usd, char *data, int data_len, struct sockaddr *sa_source, int sa_len){	struct timeval udp_arrival;	struct ntptime udp_arrival_ntp;#ifdef _PRECISION_SIOCGSTAMP	if ( ioctl(usd, SIOCGSTAMP, &udp_arrival) < 0 ) {		perror("ioctl-SIOCGSTAMP");		gettimeofday(&udp_arrival,NULL);	}#else	gettimeofday(&udp_arrival,NULL);#endif	udp_arrival_ntp.coarse = udp_arrival.tv_sec + JAN_1970;	udp_arrival_ntp.fine   = NTPFRAC(udp_arrival.tv_usec);	if (debug) {		printf("packet of length %d received\n",data_len);		printf("Source: %s\n", make_addr(sa_source));	}	if (rfc1305print(data,&udp_arrival_ntp) < 0) {		if (debug)			printf("kiss of death!  removing %s...\n",					make_addr(sa_source));		return -1;	}	return 0;}double ntpdiff( struct ntptime *start, struct ntptime *stop){	int a;	unsigned int b;	a = stop->coarse - start->coarse;	if (stop->fine >= start->fine) {		b = stop->fine - start->fine;	} else {		b = start->fine - stop->fine;		b = ~b;		a -= 1;	}		return a*1.e6 + b * (1.e6/4294967296.0);}int rfc1305print(char *data, struct ntptime *arrival){/* straight out of RFC-1305 Appendix A */	int li, vn, mode, stratum, poll, prec;	int delay, disp, refid;	struct ntptime reftime, orgtime, rectime, xmttime;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区高清不卡| 91精品国产综合久久蜜臀| 久久精品国产一区二区三| 五月综合激情婷婷六月色窝| 亚洲愉拍自拍另类高清精品| 一区二区三区精品| 亚洲国产日韩精品| 午夜av一区二区| 六月丁香婷婷久久| 国产风韵犹存在线视精品| 国产99久久久久| 成人激情午夜影院| 在线观看亚洲精品视频| 欧美色图12p| 欧美二区乱c少妇| 精品免费视频一区二区| 久久久久久亚洲综合| 国产精品理论在线观看| 亚洲精选视频免费看| 天天射综合影视| 精品制服美女丁香| 成人av免费在线| 欧美在线免费播放| 26uuu久久综合| 亚洲另类在线制服丝袜| 亚洲成av人**亚洲成av**| 韩国v欧美v日本v亚洲v| 不卡电影免费在线播放一区| 欧美日韩一区三区四区| 精品国产免费一区二区三区香蕉 | 欧美日韩中字一区| 日韩欧美国产一二三区| 欧美激情一区在线观看| 午夜精品福利视频网站| 国产黄色91视频| 欧美日韩精品久久久| 久久精品人人做人人综合 | 欧美日韩精品一区二区三区| 欧美一级久久久| 亚洲色图制服诱惑| 国产在线视视频有精品| 欧美色区777第一页| 久久久www成人免费毛片麻豆| 一区二区三区精品在线| 国产精品77777竹菊影视小说| 欧美吻胸吃奶大尺度电影| 欧美国产日韩a欧美在线观看| 日韩极品在线观看| 一本到不卡免费一区二区| 久久久亚洲精华液精华液精华液| 亚洲国产精品久久一线不卡| 粉嫩欧美一区二区三区高清影视| 欧美日韩不卡一区二区| 亚洲欧美区自拍先锋| 国产老妇另类xxxxx| 日韩一区二区免费在线观看| 伊人色综合久久天天人手人婷| 国产jizzjizz一区二区| 精品国产网站在线观看| 青青草成人在线观看| 欧美色综合网站| 亚洲自拍偷拍综合| 91福利视频在线| 亚洲三级在线观看| 国产成人免费在线| 26uuu欧美| 黑人巨大精品欧美黑白配亚洲 | 日韩激情视频网站| 欧美视频中文字幕| 一区二区三区在线免费观看| 国产传媒欧美日韩成人| 久久久久久久久蜜桃| 国产在线精品免费| 欧美中文字幕亚洲一区二区va在线| 亚洲成人精品一区二区| 欧美午夜理伦三级在线观看| 亚洲欧美日韩中文播放| 一本到不卡免费一区二区| 亚洲免费视频成人| 日本高清成人免费播放| 成人免费在线视频| 成人高清在线视频| 久久狠狠亚洲综合| 色猫猫国产区一区二在线视频| 91在线看国产| 日韩精品视频网站| 亚洲国产精品二十页| 国产精品一区二区果冻传媒| 久久精品人人做| 懂色av一区二区三区免费观看 | 国产一区二区精品在线观看| 久久在线免费观看| 成人精品视频.| 亚洲激情自拍视频| 欧美男同性恋视频网站| 韩国精品一区二区| 中文字幕永久在线不卡| 欧美性大战xxxxx久久久| 日韩精品国产精品| 久久久精品综合| 成人一级黄色片| 中文字幕av不卡| 最新国产精品久久精品| 91精品免费在线| 亚洲成人av一区二区三区| 精品三级在线看| 成人av在线资源网| 蜜臀av一区二区在线观看| 久久综合九色综合欧美就去吻 | 国产91在线观看| 亚洲一区二区三区免费视频| 91精品国产麻豆国产自产在线| 国产成a人亚洲| 亚洲高清免费视频| 国产精品女主播av| 欧美日韩电影一区| 99久久久久久| 国产一区二区不卡老阿姨| 久久久久久免费| 在线91免费看| 色国产综合视频| 一区二区三区欧美在线观看| 在线看不卡av| 国产欧美久久久精品影院| 欧美日本高清视频在线观看| 国产精品羞羞答答xxdd| 亚洲欧美一区二区久久| 欧美日韩在线播放| 国产曰批免费观看久久久| 中文字幕一区二区日韩精品绯色| 欧美亚洲综合久久| 国产美女视频91| 一区二区三区国产| 欧美经典一区二区| 欧美日本一区二区三区四区| 国产精品小仙女| 亚洲v精品v日韩v欧美v专区| 中文字幕精品三区| 精品久久久久久久久久久久包黑料| 99国产欧美另类久久久精品| 国产精品99久久久久久似苏梦涵| 国产不卡在线播放| 国产精品伦理一区二区| 欧美性高清videossexo| 99麻豆久久久国产精品免费 | 欧美va天堂va视频va在线| 欧美日韩国产中文| 欧美三区在线观看| 欧美亚洲国产一区二区三区va | 国产白丝精品91爽爽久久 | 亚洲乱码一区二区三区在线观看| 国产午夜三级一区二区三| 欧美v日韩v国产v| 日韩欧美电影一二三| 欧美一区二区三级| 7777女厕盗摄久久久| 欧美日韩亚洲国产综合| 成人av电影观看| 成人免费视频视频| 色综合久久九月婷婷色综合| 99久久综合精品| 成人av电影在线播放| 国产不卡一区视频| 国产精品一区二区在线观看不卡| 日本成人中文字幕| 免播放器亚洲一区| 久久久午夜精品理论片中文字幕| 日韩免费观看高清完整版| 欧美另类久久久品| 欧美日韩一区二区在线视频| 在线看国产一区二区| 欧美视频一区二区三区在线观看 | 久久蜜桃一区二区| 欧美韩国日本一区| 亚洲一区二区影院| 久久成人免费电影| 99热99精品| 在线播放中文字幕一区| 久久综合色8888| 亚洲美女免费视频| 久久99九九99精品| 色综合婷婷久久| 日韩亚洲国产中文字幕欧美| 久久精品一级爱片| 亚洲精品国久久99热| 日韩电影免费在线观看网站| 国产激情偷乱视频一区二区三区| 91首页免费视频| 欧美一区二区三区色| 国产精品美女久久久久高潮 | 欧美一区二区大片| 中文字幕av一区 二区| 亚洲va韩国va欧美va精品| 国产盗摄一区二区| 欧美裸体bbwbbwbbw| 亚洲国产高清不卡| 男女性色大片免费观看一区二区| 成人激情文学综合网| 欧美成人aa大片| 亚洲一线二线三线视频|