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

📄 mcast_join.lc

📁 unix网络编程卷1:套接口API的全书源码
💻 LC
📖 第 1 页 / 共 2 页
字号:
                    errno = ENXIO;  /* i/f index not found */##117 ##src/lib/mcast_join.c##                    return (-1);##118 ##src/lib/mcast_join.c##                }##119 ##src/lib/mcast_join.c##                goto doioctl;##120 ##src/lib/mcast_join.c##            } else if (ifname != NULL) {##121 ##src/lib/mcast_join.c##                strncpy(ifreq.ifr_name, ifname, IFNAMSIZ);##122 ##src/lib/mcast_join.c##              doioctl:##123 ##src/lib/mcast_join.c##                if (ioctl(sockfd, SIOCGIFADDR, &ifreq) < 0)##124 ##src/lib/mcast_join.c##                    return (-1);##125 ##src/lib/mcast_join.c##                memcpy(&mreq.imr_interface,##126 ##src/lib/mcast_join.c##                       &((struct sockaddr_in *) &ifreq.ifr_addr)->sin_addr,##127 ##src/lib/mcast_join.c##                       sizeof(struct in_addr));##128 ##src/lib/mcast_join.c##            } else##129 ##src/lib/mcast_join.c##                mreq.imr_interface.s_addr = htonl(INADDR_ANY);##130 ##src/lib/mcast_join.c##            return (setsockopt(sockfd, IPPROTO_IP, IP_ADD_SOURCE_MEMBERSHIP,##131 ##src/lib/mcast_join.c##                               &mreq, sizeof(mreq)));##132 ##src/lib/mcast_join.c##        }##133 ##src/lib/mcast_join.c###endif##134 ##src/lib/mcast_join.c###ifdef  IPV6##135 ##src/lib/mcast_join.c##    case AF_INET6:              /* IPv6 source-specific API is MCAST_JOIN_SOURCE_GROUP */##136 ##src/lib/mcast_join.c###endif##137 ##src/lib/mcast_join.c##    default:##138 ##src/lib/mcast_join.c##        errno = EPROTONOSUPPORT;##139 ##src/lib/mcast_join.c##        return (-1);##140 ##src/lib/mcast_join.c##    }##141 ##src/lib/mcast_join.c###endif##142 ##src/lib/mcast_join.c##}##143 ##src/lib/mcast_join.c##void##144 ##src/lib/mcast_join.c##Mcast_join_source_group(int sockfd, const SA *src, socklen_t srclen,##145 ##src/lib/mcast_join.c##                        const SA *grp, socklen_t grplen,##146 ##src/lib/mcast_join.c##                        const char *ifname, u_int ifindex)##147 ##src/lib/mcast_join.c##{##148 ##src/lib/mcast_join.c##    if (mcast_join_source_group(sockfd, src, srclen, grp, grplen,##149 ##src/lib/mcast_join.c##                                ifname, ifindex) < 0)##150 ##src/lib/mcast_join.c##        err_sys("mcast_join_source_group error");##151 ##src/lib/mcast_join.c##}##152 ##src/lib/mcast_join.c##int##153 ##src/lib/mcast_join.c##mcast_block_source(int sockfd, const SA *src, socklen_t srclen,##154 ##src/lib/mcast_join.c##                   const SA *grp, socklen_t grplen)##155 ##src/lib/mcast_join.c##{##156 ##src/lib/mcast_join.c###ifdef MCAST_BLOCK_SOURCE##157 ##src/lib/mcast_join.c##    struct group_source_req req;##158 ##src/lib/mcast_join.c##    req.gr_interface = 0;##159 ##src/lib/mcast_join.c##    memcpy(&req.gr_group, grp, grplen);##160 ##src/lib/mcast_join.c##    memcpy(&req.gr_src, src, srclen);##161 ##src/lib/mcast_join.c##    return (setsockopt(sockfd, family_to_level(grp->sa_family),##162 ##src/lib/mcast_join.c##                       MCAST_BLOCK_SOURCE, &req, sizeof(req)));##163 ##src/lib/mcast_join.c###else##164 ##src/lib/mcast_join.c##    switch (grp->sa_family) {##165 ##src/lib/mcast_join.c###ifdef IP_BLOCK_SOURCE##166 ##src/lib/mcast_join.c##    case AF_INET:{##167 ##src/lib/mcast_join.c##            struct ip_mreq_source mreq;##168 ##src/lib/mcast_join.c##            memcpy(&mreq.imr_multiaddr,##169 ##src/lib/mcast_join.c##                   &((struct sockaddr_in *) grp)->sin_addr,##170 ##src/lib/mcast_join.c##                   sizeof(struct in_addr));##171 ##src/lib/mcast_join.c##            memcpy(&mreq.imr_sourceaddr,##172 ##src/lib/mcast_join.c##                   &((struct sockaddr_in *) src)->sin_addr,##173 ##src/lib/mcast_join.c##                   sizeof(struct in_addr));##174 ##src/lib/mcast_join.c##            mreq.imr_interface.s_addr = htonl(INADDR_ANY);##175 ##src/lib/mcast_join.c##            return (setsockopt(sockfd, IPPROTO_IP, IP_BLOCK_SOURCE,##176 ##src/lib/mcast_join.c##                               &mreq, sizeof(mreq)));##177 ##src/lib/mcast_join.c##        }##178 ##src/lib/mcast_join.c###endif##179 ##src/lib/mcast_join.c###ifdef  IPV6##180 ##src/lib/mcast_join.c##    case AF_INET6:              /* IPv6 source-specific API is MCAST_BLOCK_SOURCE */##181 ##src/lib/mcast_join.c###endif##182 ##src/lib/mcast_join.c##    default:##183 ##src/lib/mcast_join.c##        errno = EPROTONOSUPPORT;##184 ##src/lib/mcast_join.c##        return (-1);##185 ##src/lib/mcast_join.c##    }##186 ##src/lib/mcast_join.c###endif##187 ##src/lib/mcast_join.c##}##188 ##src/lib/mcast_join.c##void##189 ##src/lib/mcast_join.c##Mcast_block_source(int sockfd, const SA *src, socklen_t srclen,##190 ##src/lib/mcast_join.c##                   const SA *grp, socklen_t grplen)##191 ##src/lib/mcast_join.c##{##192 ##src/lib/mcast_join.c##    if (mcast_block_source(sockfd, src, srclen, grp, grplen) < 0)##193 ##src/lib/mcast_join.c##        err_sys("mcast_block_source error");##194 ##src/lib/mcast_join.c##}##195 ##src/lib/mcast_join.c##int##196 ##src/lib/mcast_join.c##mcast_unblock_source(int sockfd, const SA *src, socklen_t srclen,##197 ##src/lib/mcast_join.c##                     const SA *grp, socklen_t grplen)##198 ##src/lib/mcast_join.c##{##199 ##src/lib/mcast_join.c###ifdef MCAST_UNBLOCK_SOURCE##200 ##src/lib/mcast_join.c##    struct group_source_req req;##201 ##src/lib/mcast_join.c##    req.gr_interface = 0;##202 ##src/lib/mcast_join.c##    memcpy(&req.gr_group, grp, grplen);##203 ##src/lib/mcast_join.c##    memcpy(&req.gr_src, src, srclen);##204 ##src/lib/mcast_join.c##    return (setsockopt(sockfd, family_to_level(grp->sa_family),##205 ##src/lib/mcast_join.c##                       MCAST_UNBLOCK_SOURCE, &req, sizeof(req)));##206 ##src/lib/mcast_join.c###else##207 ##src/lib/mcast_join.c##    switch (grp->sa_family) {##208 ##src/lib/mcast_join.c###ifdef IP_UNBLOCK_SOURCE##209 ##src/lib/mcast_join.c##    case AF_INET:{##210 ##src/lib/mcast_join.c##            struct ip_mreq_source mreq;##211 ##src/lib/mcast_join.c##            memcpy(&mreq.imr_multiaddr,##212 ##src/lib/mcast_join.c##                   &((struct sockaddr_in *) grp)->sin_addr,##213 ##src/lib/mcast_join.c##                   sizeof(struct in_addr));##214 ##src/lib/mcast_join.c##            memcpy(&mreq.imr_sourceaddr,##215 ##src/lib/mcast_join.c##                   &((struct sockaddr_in *) src)->sin_addr,##216 ##src/lib/mcast_join.c##                   sizeof(struct in_addr));##217 ##src/lib/mcast_join.c##            mreq.imr_interface.s_addr = htonl(INADDR_ANY);##218 ##src/lib/mcast_join.c##            return (setsockopt(sockfd, IPPROTO_IP, IP_UNBLOCK_SOURCE,##219 ##src/lib/mcast_join.c##                               &mreq, sizeof(mreq)));##220 ##src/lib/mcast_join.c##        }##221 ##src/lib/mcast_join.c###endif##222 ##src/lib/mcast_join.c###ifdef  IPV6##223 ##src/lib/mcast_join.c##    case AF_INET6:              /* IPv6 source-specific API is MCAST_UNBLOCK_SOURCE */##224 ##src/lib/mcast_join.c###endif##225 ##src/lib/mcast_join.c##    default:##226 ##src/lib/mcast_join.c##        errno = EPROTONOSUPPORT;##227 ##src/lib/mcast_join.c##        return (-1);##228 ##src/lib/mcast_join.c##    }##229 ##src/lib/mcast_join.c###endif##230 ##src/lib/mcast_join.c##}##231 ##src/lib/mcast_join.c##void##232 ##src/lib/mcast_join.c##Mcast_unblock_source(int sockfd, const SA *src, socklen_t srclen,##233 ##src/lib/mcast_join.c##                     const SA *grp, socklen_t grplen)##234 ##src/lib/mcast_join.c##{##235 ##src/lib/mcast_join.c##    if (mcast_unblock_source(sockfd, src, srclen, grp, grplen) < 0)##236 ##src/lib/mcast_join.c##        err_sys("mcast_unblock_source error");##237 ##src/lib/mcast_join.c##}##238 ##src/lib/mcast_join.c##

⌨️ 快捷键说明

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