IO-Socket-Multicast
view release on metacpan or search on metacpan
Multicast.xs view on Meta::CPAN
void
_mcast_add(sock,mcast_group,interface_addr="")
InputStream sock
char* mcast_group
char* interface_addr
PROTOTYPE: $$;$
PREINIT:
int fd;
struct ip_mreq mreq;
PPCODE:
{
fd = PerlIO_fileno(sock);
if (!inet_aton(mcast_group,&mreq.imr_multiaddr))
croak("Invalid address used for mcast group");
if ((strlen(interface_addr) > 0)) {
if (!inet_aton(interface_addr,&mreq.imr_interface))
croak("Invalid address used for local interface");
} else {
mreq.imr_interface.s_addr = INADDR_ANY;
}
Multicast.xs view on Meta::CPAN
void
_mcast_drop(sock,mcast_group,interface_addr="")
InputStream sock
char* mcast_group
char* interface_addr
PROTOTYPE: $$;$
PREINIT:
int fd;
struct ip_mreq mreq;
PPCODE:
{
fd = PerlIO_fileno(sock);
if (!inet_aton(mcast_group,&mreq.imr_multiaddr))
croak("Invalid address used for mcast group");
if ((strlen(interface_addr) > 0)) {
if (!inet_aton(interface_addr,&mreq.imr_interface))
croak("Invalid address used for local interface");
} else {
mreq.imr_interface.s_addr = htonl(INADDR_ANY);
}
Multicast.xs view on Meta::CPAN
void
_mcast_if(sock,...)
InputStream sock
PROTOTYPE: $;$
PREINIT:
int fd,len;
STRLEN slen;
char* addr;
struct in_addr ifaddr;
struct ip_mreq mreq;
PPCODE:
{
fd = PerlIO_fileno(sock);
if (items > 1) { /* setting interface */
addr = SvPV(ST(1),slen);
if (inet_aton(addr,&ifaddr) == 0 )
XSRETURN_EMPTY;
if (setsockopt(fd,IPPROTO_IP,IP_MULTICAST_IF,(void*)&ifaddr,sizeof(ifaddr)) == 0)
XSRETURN_YES;
else
XSRETURN_NO;
( run in 0.522 second using v1.01-cache-2.11-cpan-5511b514fd6 )