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

📄 dgechoaddr.c

📁 unix网络编程第一卷socket编程书上的全部源代码
💻 C
字号:
#include	"unpifi.h"#undef	MAXLINE#define	MAXLINE	20		/* to see datagram truncation */voiddg_echo(int sockfd, SA *pcliaddr, socklen_t clilen){	int						flags;	const int				on = 1;	socklen_t				len;	ssize_t					n;	char					mesg[MAXLINE], str[INET6_ADDRSTRLEN],							ifname[IFNAMSIZ];	struct in_addr			in_zero;	struct unp_in_pktinfo	pktinfo;#ifdef	IP_RECVDSTADDR	if (setsockopt(sockfd, IPPROTO_IP, IP_RECVDSTADDR, &on, sizeof(on)) < 0)		err_ret("setsockopt of IP_RECVDSTADDR");#endif#ifdef	IP_RECVIF	if (setsockopt(sockfd, IPPROTO_IP, IP_RECVIF, &on, sizeof(on)) < 0)		err_ret("setsockopt of IP_RECVIF");#endif	bzero(&in_zero, sizeof(struct in_addr));	/* all 0 IPv4 address */	for ( ; ; ) {		len = clilen;		flags = 0;		n = Recvfrom_flags(sockfd, mesg, MAXLINE, &flags,						   pcliaddr, &len, &pktinfo);		printf("%d-byte datagram from %s", n, Sock_ntop(pcliaddr, len));		if (memcmp(&pktinfo.ipi_addr, &in_zero, sizeof(in_zero)) != 0)			printf(", to %s", Inet_ntop(AF_INET, &pktinfo.ipi_addr,										str, sizeof(str)));		if (pktinfo.ipi_ifindex > 0)			printf(", recv i/f = %s",				   If_indextoname(pktinfo.ipi_ifindex, ifname));#ifdef	MSG_TRUNC		if (flags & MSG_TRUNC)	printf(" (datagram truncated)");#endif#ifdef	MSG_CTRUNC		if (flags & MSG_CTRUNC)	printf(" (control info truncated)");#endif#ifdef	MSG_BCAST		if (flags & MSG_BCAST)	printf(" (broadcast)");#endif#ifdef	MSG_MCAST		if (flags & MSG_MCAST)	printf(" (multicast)");#endif		printf("\n");		Sendto(sockfd, mesg, n, 0, pcliaddr, len);	}}

⌨️ 快捷键说明

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