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 + -
显示快捷键?