当前位置:我的异常网» Linux/Unix » 组播tcpdump可以抓到,但APP收不到,求对策或解释
组播tcpdump可以抓到,但APP收不到,求对策或解释
www.myexceptions.net 网友分享于:2015-01-07 浏览:0次
组播tcpdump可以抓到,但APP收不到,求策略或解释
如题:
一个组播程序,绑定到了224.188.188.188.30583上, tcpdump可以抓到组播包数据,但应用层且接收不到.
部分代码:
#define GROUP "224.188.188.188"
#define GROUP_SRC_PORT 30583
//初始化
int loop = 0, rcv64K = 1024 * 64;
struct sockaddr_in addr;
memset(&g_ds, 0, sizeof(g_ds));
g_ds.socket = -1;
g_ds.group.sin_family = AF_INET;
g_ds.group.sin_addr.s_addr = inet_addr(GROUP);
g_ds.group.sin_port = htons(GROUP_DST_PORT);
memcpy(&addr, &g_ds.group, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_port = htons(GROUP_SRC_PORT);
/* Create the discovery socket and join the group */
if ((-1 == (g_ds.socket = socket(AF_INET, SOCK_DGRAM, 0))) ||
(setsockopt(g_ds.socket, SOL_SOCKET, SO_RCVBUF, &rcv64K, sizeof(rcv64K)),
bind(g_ds.socket, (struct sockaddr *)&addr, sizeof(addr))) ||
SCAPI_ds_group_enable(g_ds.socket, g_ds.group.sin_addr.s_addr, 1))
goto err;
setsockopt(g_ds.socket, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop));
//组播加入/禁止
int SCAPI_ds_group_enable(int s, in_addr_t group, int enable) {
struct ip_mreqn req;
struct if_nameindex *if_ni, *ifc;
req.imr_multiaddr.s_addr = group;
if ((if_ni = if_nameindex())) {
int count = 0;
struct ifreq ifr;
for (ifc = if_ni; ifc->if_