📄 net_mcast.cpp
字号:
#include "stdafx.h"
#include "net_mcast.h"
#include "../thrd/thrd_decoder.h"
#include "../NetDef.h"
//////////////////////////////////////////////////////////////////////////
//##ModelId=3F9A1D220247
net_mcast::net_mcast()//: mc(NULL)
{
}
//##ModelId=3F9A1D220251
net_mcast::~net_mcast()
{
destroy();
}
//##ModelId=3F9A1D220253
bool net_mcast::create(net_addr& addr)
{
/*
if( !net_udp::create(addr) )
return false;
net_udp::add_cb(this);
*/
local = addr;
return true;
}
//##ModelId=3F9A1D22025D
void net_mcast::destroy()
{
net_udp::destroy();
/*if( mc )
{
closesocket(mc);
mc = NULL;
}*/
}
//##ModelId=3F9A1D220284
bool net_mcast::join(net_addr& mc_addr, int ttl, BOOL loopback, BOOL image_type)
{
// ULONG cb = 0;
int err = 0;
mcaddr = mc_addr;
ip_mreq im;
im.imr_interface.s_addr = local.ip();
im.imr_multiaddr.s_addr = mc_addr.ip();
local.set_real_port(mc_addr.port());
if(!net_udp::create(local, image_type)) return false;
err = setsockopt(h, 0, IP_MULTICAST_TTL, (char*)&ttl, sizeof(int));
err = setsockopt(h, 0, IP_MULTICAST_LOOP, (char*)&loopback, sizeof(BOOL));
// IP_ADD_MEMBERSHIP, WS11:(5) WS22:(12)
int iam = IP_ADD_MEMBERSHIP;
err = setsockopt(h, 0, IP_ADD_MEMBERSHIP, (char*)&im, sizeof(im));
err = WSAGetLastError();
return err != SOCKET_ERROR;
}
//##ModelId=3F9A1D220298
void net_mcast::leave()
{
ip_mreq im;
im.imr_interface.s_addr = local.ip();
im.imr_multiaddr.s_addr = mcaddr.ip();
// IP_DROP_MEMBERSHIP WS11:(6) WS22(13)
int err = setsockopt(h, 0, IP_DROP_MEMBERSHIP, (char*)&im, sizeof(im) );
}
//##ModelId=3F9A1D220266
DWORD net_mcast::send(byte* buf, int length, net_addr& target)
{
return net_udp::send(buf, length, target);
}
//##ModelId=3F9A1D220279
DWORD net_mcast::recv(byte* buf, net_addr* from /* = NULL */)
{
return net_udp::recv(buf, from);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -