⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test01.c

📁 这个源码是UNIX网络编程卷1一书中的事例源代码
💻 C
字号:
#include	"unp.h"intmain(int argc, char **argv){	int				sockfd, flag;	ssize_t			n;	char			buff[MAXLINE];	const int		on = 1;	socklen_t		addrlen, len;	struct sockaddr	*cliaddr;	if (argc == 2)		sockfd = Udp_server(NULL, argv[1], &addrlen);	else if (argc == 3)		sockfd = Udp_server(argv[1], argv[2], &addrlen);	else		err_quit("usage: test01 <hostname> <service>");	cliaddr = Malloc(addrlen);#ifdef	IP_RECVDSTADDR	Setsockopt(sockfd, IPPROTO_IP, IP_RECVDSTADDR, &on, sizeof(on));	len = sizeof(flag);	Getsockopt(sockfd, IPPROTO_IP, IP_RECVDSTADDR, &flag, &len);	printf("IP_RECVDSTADDR option = %d, size = %d\n", flag, len);#else	printf("IP_RECVDSTADDR not defined\n");#endif#ifdef	IP_RECVIF	Setsockopt(sockfd, IPPROTO_IP, IP_RECVIF, &on, sizeof(on));	len = sizeof(flag);	Getsockopt(sockfd, IPPROTO_IP, IP_RECVIF, &flag, &len);	printf("IP_RECVIF option = %d, size = %d\n", flag, len);#else	printf("IP_RECVIF not defined\n");#endif	for ( ; ; ) {#define	CONTROL_LEN	(sizeof(struct cmsghdr) + sizeof(struct in_addr))		char		control[CONTROL_LEN];		msg.msg_control = control;		msg.msg_controllen = sizeof(control);		msg.msg_flags = 0;#else		bzero(&msg, sizeof(msg));	/* make certain msg_accrightslen = 0 */#endif		msg.msg_name = sa;		msg.msg_namelen = *salenptr;		iov[0].iov_base = ptr;		iov[0].iov_len = nbytes;		msg.msg_iov = iov;		msg.msg_iovlen = 1;		if ( (n = recvmsg(fd, &msg, *flagsp)) < 0)			return(n);		len = addrlen;		n = Recvfrom(sockfd, buff, MAXLINE, 0, cliaddr, &len);		printf("datagram from %s\n", Sock_ntop(cliaddr, len));        ticks = time(NULL);        snprintf(buff, sizeof(buff), "%.24s\r\n", ctime(&ticks));        Sendto(sockfd, buff, strlen(buff), 0, cliaddr, len);	}	exit(0);}

⌨️ 快捷键说明

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