mcast_unblock_source函数
2024-09-04 08:19:44
#include <errno.h>
#include <sys/socket.h> #define SA struct sockaddr int mcast_unblock_source(int sockfd, const SA *src,
socklen_t srclen,const SA *grp, socklen_t grplen)
{
#ifdef MCAST_UNBLOCK_SOURCE
struct group_source_req req;
req.gsr_interface = ;
if (grplen > sizeof(req.gsr_group) ||
srclen > sizeof(req.gsr_source)) {
errno = EINVAL;
return -;
}
memcpy(&req.gsr_group, grp, grplen);
memcpy(&req.gsr_source, src, srclen);
return (setsockopt(sockfd, family_to_level(grp->sa_family),
MCAST_UNBLOCK_SOURCE, &req, sizeof(req)));
#else
switch (grp->sa_family) {
#ifdef IP_UNBLOCK_SOURCE
case AF_INET: {
struct ip_mreq_source mreq; memcpy(&mreq.imr_multiaddr,
&((struct sockaddr_in *) grp)->sin_addr,
sizeof(struct in_addr));
memcpy(&mreq.imr_sourceaddr,
&((struct sockaddr_in *) src)->sin_addr,
sizeof(struct in_addr));
mreq.imr_interface.s_addr = htonl(INADDR_ANY); return(setsockopt(sockfd, IPPROTO_IP,
IP_UNBLOCK_SOURCE, &mreq, sizeof(mreq)));
}
#endif #ifdef IPV6
/* IPv6 source-specific API is MCAST_UNBLOCK_SOURCE */
case AF_INET6: {}
#endif
default: {
errno = EAFNOSUPPORT;
return(-);
}
}
#endif
}
最新文章
- php sleep()的实时输出打印,清除ob缓冲区
- 利用node构建本地服务
- CodeVS 2845 排序的代价
- asp.net MVC ajax上传文件
- 改变Chrome浏览器主程序_缓存_个人信息路径
- 【英语】Bingo口语笔记(78) - let系列
- Deferred
- Android通过HTTP协议实现上传文件数据
- 通过SocketLog快速分析php程序
- 【原创】RMQ - ST算法详解
- psy &; obv
- left join 后的条件 位置不同,查询的结果不同
- C++实验二——函数重载、函数模板、简单类的定义和实现
- ReCAPTCHA &; 手势验证
- luogu P2962 [USACO09NOV]灯Lights 高斯消元
- ABAP 7.50 新特性之另一个CORRESPONDING
- python Polygon模块安装
- (转)Fabric CA环境的集成
- python pillow
- Linux 命令的20个实用范例,入门必看!