The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
# Try attaching to a multicast interface
#

use strict;
use Test::More tests => 10;


# load IO::Socket::Multicast6 and IO::Interface
BEGIN {
	use_ok( 'IO::Interface::Simple' );
	use_ok( 'IO::Socket::Multicast6' );
}


# Find first multicast enabled interface
my $iface = undef;
my @interfaces = IO::Interface::Simple->interfaces;
foreach my $if (@interfaces) {
	next unless ($if->is_running);
	next unless ($if->is_multicast);
	
	# Found multicast enabled interface
	$iface = $if->name();
	last;
}

unless (defined $iface) {
	die( "Failed to find multicast enabled interface." );
}


# Create an IPv4 multicast socket
my $sock4 = new IO::Socket::Multicast6( Domain => AF_INET );
ok( $sock4, "Create IPv4 multicast socket" );

ok( defined $sock4->mcast_if(), "Get outgoing interface of IPv4 socket" );
ok( defined $sock4->mcast_if($iface), "Set outgoing interface of IPv4 socket" );
ok( $sock4->mcast_if() eq $iface, "Verify outgoing interface of IPv4 socket" );


# Create an IPv6 multicast socket
my $sock6 = new IO::Socket::Multicast6( Domain => AF_INET6 );
ok( $sock6, "Create IPv6 multicast socket" );

ok( defined $sock6->mcast_if(), "Get outgoing interface of IPv6 socket" );
ok( defined $sock6->mcast_if($iface), "Set outgoing interface of IPv6 socket" );
ok( $sock6->mcast_if() eq $iface, "Verify outgoing interface of IPv6 socket" );