Socket::Multicast6 - Constructors and constants for IPv4 and IPv6 multicast socket operations.


Socket-Multicast6 documentation Contained in the Socket-Multicast6 distribution.

Index


Code Index:

NAME

Top

Socket::Multicast6 - Constructors and constants for IPv4 and IPv6 multicast socket operations.

SYNOPSIS

Top

  use Socket::Multicast6 qw(:all);

  my $ip = getprotobyname( 'ip' );

  my $ip_mreq = pack_ip_mreq( inet_aton( $mcast_addr ), inet_aton( $if_addr ) );

  my $ipv6_mreq = pack_ipv6_mreq( inet_pton( AF_INET6, $mcast6_addr ), $if_index );

  setsockopt( $sock, $ip, IP_ADD_MEMBERSHIP, $ip_mreq )
    or die( "setsockopt IP_ADD_MEMBERSHIP failed: $!" );

  setsockopt( $sock, $ip, IP_DROP_MEMBERSHIP, $ip_mreq )
    or die( "setsockopt IP_DROP_MEMBERSHIP failed: $!" );

  setsockopt( $sock, $ip, IP_MULTICAST_LOOP, pack( 'C', $loop ) )
    or die( "setsockopt IP_MULTICAST_LOOP failed: $!" );

  setsockopt( $sock, $ip, IP_MULTICAST_TTL, pack( 'C', $ttl ) )
    or die( "setsockopt IP_MULTICAST_TTL failed: $!" );

DESCRIPTION

Top

This module is used to gain access to constants and utility functions used when manipulating multicast socket attributes.

For simple, object-oriented way of doing the same thing, take a look at IO::Socket::Multicast6 or IO::Socket::Multicast.

EXPORTS

Top

By default nothing is exported, you can use the 'ipv4', 'ipv6' and 'independent' to export a specific protocol family, or 'all' to export all symbols.

FUNCTIONS

Top

CONSTANTS

Top

IP_MULTICAST_IF
IP_MULTICAST_TTL
IP_MULTICAST_LOOP
IP_ADD_MEMBERSHIP
IP_DROP_MEMBERSHIP
IP_ADD_SOURCE_MEMBERSHIP
IP_DROP_SOURCE_MEMBERSHIP
IPV6_MULTICAST_IF
IPV6_MULTICAST_HOPS
IPV6_MULTICAST_LOOP
IPV6_JOIN_GROUP
IPV6_LEAVE_GROUP
MCAST_JOIN_GROUP
MCAST_BLOCK_SOURCE
MCAST_UNBLOCK_SOURCE
MCAST_LEAVE_GROUP
MCAST_JOIN_SOURCE_GROUP
MCAST_LEAVE_SOURCE_GROUP

SEE ALSO

Top

IO::Socket::Multicast6 (The easier, object-oriented way)

AUTHOR

Top

Based on Socket::Multicast by Jonathan Steinert, <hachi@cpan.org> Socket::Multicast6 by Nicholas J Humfrey, <njh@cpan.org>

COPYRIGHT AND LICENSE

Top


Socket-Multicast6 documentation Contained in the Socket-Multicast6 distribution.

package Socket::Multicast6;

use strict;
use warnings;
use vars qw(@ISA $VERSION);
use Carp;

our $VERSION = '0.04';

require XSLoader;
XSLoader::load('Socket::Multicast6', $VERSION);

require Exporter;
our @ISA = qw(Exporter);


my @export_ipv4 = qw(
		IP_MULTICAST_IF
		IP_MULTICAST_TTL
		IP_MULTICAST_LOOP
		IP_ADD_MEMBERSHIP
		IP_DROP_MEMBERSHIP
		IP_ADD_SOURCE_MEMBERSHIP
		IP_DROP_SOURCE_MEMBERSHIP
		pack_ip_mreq
		pack_ip_mreq_source
	);

my @export_ipv6 = qw(
		IPV6_MULTICAST_IF
		IPV6_MULTICAST_HOPS
		IPV6_MULTICAST_LOOP
		IPV6_JOIN_GROUP
		IPV6_LEAVE_GROUP
		pack_ipv6_mreq
	);

my @export_independent = qw(
		MCAST_JOIN_GROUP
		MCAST_BLOCK_SOURCE
		MCAST_UNBLOCK_SOURCE
		MCAST_LEAVE_GROUP
		MCAST_JOIN_SOURCE_GROUP
		MCAST_LEAVE_SOURCE_GROUP
	);

our %EXPORT_TAGS = (
	'ipv4' => [ @export_ipv4 ],
	'ipv6' => [ @export_ipv6 ],
	'independent' => [ @export_independent ],
	'all' => [ @export_ipv4, @export_ipv6, @export_independent ],
);


our @EXPORT_OK = ( @{ $EXPORT_TAGS{'all'} } );
our @EXPORT = ( );

sub AUTOLOAD {
	# This AUTOLOAD is used to 'autoload' constants from the constant()
	# XS function.  If a constant is not found then control is passed
	# to the AUTOLOAD in AutoLoader.
	
	my $constname;
	our $AUTOLOAD;
	($constname = $AUTOLOAD) =~ s/.*:://;
	croak "&Socket::Multicast6::constant not defined" if $constname eq 'constant';
	my ($error, $val) = constant($constname);
	if ($error) {
		if ($error =~  /is not a valid/) {
			$AutoLoader::AUTOLOAD = $AUTOLOAD;
			goto &AutoLoader::AUTOLOAD;
		} else {
			croak $error;
		}
	}
	no strict 'refs';
	*$AUTOLOAD = sub { $val };
	goto &$AUTOLOAD;
}



1;
__END__