readloop.c

来自「unix网络编程卷1:套接口API的全书源码」· C语言 代码 · 共 45 行

C
45
字号
#include	"ping.h"voidreadloop(void){	int				size;	char			recvbuf[BUFSIZE];	char			controlbuf[BUFSIZE];	struct msghdr	msg;	struct iovec	iov;	ssize_t			n;	struct timeval	tval;	sockfd = Socket(pr->sasend->sa_family, SOCK_RAW, pr->icmpproto);	setuid(getuid());		/* don't need special permissions any more */	if (pr->finit)		(*pr->finit)();	size = 60 * 1024;		/* OK if setsockopt fails */	setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));	sig_alrm(SIGALRM);		/* send first packet */	iov.iov_base = recvbuf;	iov.iov_len = sizeof(recvbuf);	msg.msg_name = pr->sarecv;	msg.msg_iov = &iov;	msg.msg_iovlen = 1;	msg.msg_control = controlbuf;	for ( ; ; ) {		msg.msg_namelen = pr->salen;		msg.msg_controllen = sizeof(controlbuf);		n = recvmsg(sockfd, &msg, 0);		if (n < 0) {			if (errno == EINTR)				continue;			else				err_sys("recvmsg error");		}		Gettimeofday(&tval, NULL);		(*pr->fproc)(recvbuf, n, &msg, &tval);	}}

⌨️ 快捷键说明

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