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

📄 dgechoaddr.lc

📁 unix网络编程卷1:套接口API的全书源码
💻 LC
字号:
#include    "unpifi.h"##  1 ##src/advio/dgechoaddr.c###undef  MAXLINE##  2 ##src/advio/dgechoaddr.c###define MAXLINE 20              /* to see datagram truncation */##  3 ##src/advio/dgechoaddr.c##void##  4 ##src/advio/dgechoaddr.c##dg_echo(int sockfd, SA *pcliaddr, socklen_t clilen)##  5 ##src/advio/dgechoaddr.c##{##  6 ##src/advio/dgechoaddr.c##    int     flags;##  7 ##src/advio/dgechoaddr.c##    const int on = 1;##  8 ##src/advio/dgechoaddr.c##    socklen_t len;##  9 ##src/advio/dgechoaddr.c##    ssize_t n;## 10 ##src/advio/dgechoaddr.c##    char    mesg[MAXLINE], str[INET6_ADDRSTRLEN], ifname[IFNAMSIZ];## 11 ##src/advio/dgechoaddr.c##    struct in_addr in_zero;## 12 ##src/advio/dgechoaddr.c##    struct in_pktinfo pktinfo;## 13 ##src/advio/dgechoaddr.c###ifdef  IP_RECVDSTADDR## 14 ##src/advio/dgechoaddr.c##    if (setsockopt(sockfd, IPPROTO_IP, IP_RECVDSTADDR, &on, sizeof(on)) < 0)## 15 ##src/advio/dgechoaddr.c##        err_ret("setsockopt of IP_RECVDSTADDR");## 16 ##src/advio/dgechoaddr.c###endif## 17 ##src/advio/dgechoaddr.c###ifdef  IP_RECVIF## 18 ##src/advio/dgechoaddr.c##    if (setsockopt(sockfd, IPPROTO_IP, IP_RECVIF, &on, sizeof(on)) < 0)## 19 ##src/advio/dgechoaddr.c##        err_ret("setsockopt of IP_RECVIF");## 20 ##src/advio/dgechoaddr.c###endif## 21 ##src/advio/dgechoaddr.c##    bzero(&in_zero, sizeof(struct in_addr));    /* all 0 IPv4 address */## 22 ##src/advio/dgechoaddr.c##    for (;;) {## 23 ##src/advio/dgechoaddr.c##        len = clilen;## 24 ##src/advio/dgechoaddr.c##        flags = 0;## 25 ##src/advio/dgechoaddr.c##        n = Recvfrom_flags(sockfd, mesg, MAXLINE, &flags,## 26 ##src/advio/dgechoaddr.c##                           pcliaddr, &len, &pktinfo);## 27 ##src/advio/dgechoaddr.c##        printf("%d-byte datagram from %s", n, Sock_ntop(pcliaddr, len));## 28 ##src/advio/dgechoaddr.c##        if (memcmp(&pktinfo.ipi_addr, &in_zero, sizeof(in_zero)) != 0)## 29 ##src/advio/dgechoaddr.c##            printf(", to %s", Inet_ntop(AF_INET, &pktinfo.ipi_addr,## 30 ##src/advio/dgechoaddr.c##                                        str, sizeof(str)));## 31 ##src/advio/dgechoaddr.c##        if (pktinfo.ipi_ifindex > 0)## 32 ##src/advio/dgechoaddr.c##            printf(", recv i/f = %s",## 33 ##src/advio/dgechoaddr.c##                   If_indextoname(pktinfo.ipi_ifindex, ifname));## 34 ##src/advio/dgechoaddr.c###ifdef  MSG_TRUNC## 35 ##src/advio/dgechoaddr.c##        if (flags & MSG_TRUNC)## 36 ##src/advio/dgechoaddr.c##            printf(" (datagram truncated)");## 37 ##src/advio/dgechoaddr.c###endif## 38 ##src/advio/dgechoaddr.c###ifdef  MSG_CTRUNC## 39 ##src/advio/dgechoaddr.c##        if (flags & MSG_CTRUNC)## 40 ##src/advio/dgechoaddr.c##            printf(" (control info truncated)");## 41 ##src/advio/dgechoaddr.c###endif## 42 ##src/advio/dgechoaddr.c###ifdef  MSG_BCAST## 43 ##src/advio/dgechoaddr.c##        if (flags & MSG_BCAST)## 44 ##src/advio/dgechoaddr.c##            printf(" (broadcast)");## 45 ##src/advio/dgechoaddr.c###endif## 46 ##src/advio/dgechoaddr.c###ifdef  MSG_MCAST## 47 ##src/advio/dgechoaddr.c##        if (flags & MSG_MCAST)## 48 ##src/advio/dgechoaddr.c##            printf(" (multicast)");## 49 ##src/advio/dgechoaddr.c###endif## 50 ##src/advio/dgechoaddr.c##        printf("\n");## 51 ##src/advio/dgechoaddr.c##        Sendto(sockfd, mesg, n, 0, pcliaddr, len);## 52 ##src/advio/dgechoaddr.c##    }## 53 ##src/advio/dgechoaddr.c##}## 54 ##src/advio/dgechoaddr.c##

⌨️ 快捷键说明

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