main.c

来自「《unix网络编程第二卷》中的源代码」· C语言 代码 · 共 62 行

C
62
字号
#include	"ping.h"struct proto	proto_v4 = { proc_v4, send_v4, NULL, NULL, 0, IPPROTO_ICMP };#ifdef	IPV6struct proto	proto_v6 = { proc_v6, send_v6, NULL, NULL, 0, IPPROTO_ICMPV6 };#endifint	datalen = 56;		/* data that goes with ICMP echo request */intmain(int argc, char **argv){	int				c;	struct addrinfo	*ai;	opterr = 0;		/* don't want getopt() writing to stderr */	while ( (c = getopt(argc, argv, "v")) != -1) {		switch (c) {		case 'v':			verbose++;			break;		case '?':			err_quit("unrecognized option: %c", c);		}	}	if (optind != argc-1)		err_quit("usage: ping [ -v ] <hostname>");	host = argv[optind];	pid = getpid();	Signal(SIGALRM, sig_alrm);	ai = Host_serv(host, NULL, 0, 0);	printf("PING %s (%s): %d data bytes\n", ai->ai_canonname,		   Sock_ntop_host(ai->ai_addr, ai->ai_addrlen), datalen);		/* 4initialize according to protocol */	if (ai->ai_family == AF_INET) {		pr = &proto_v4;#ifdef	IPV6	} else if (ai->ai_family == AF_INET6) {		pr = &proto_v6;		if (IN6_IS_ADDR_V4MAPPED(&(((struct sockaddr_in6 *)								 ai->ai_addr)->sin6_addr)))			err_quit("cannot ping IPv4-mapped IPv6 address");#endif	} else		err_quit("unknown address family %d", ai->ai_family);	pr->sasend = ai->ai_addr;	pr->sarecv = Calloc(1, ai->ai_addrlen);	pr->salen = ai->ai_addrlen;	readloop();	exit(0);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?