Home  |  Linux  | Mysql  | PHP  | XML
Date:Sat Nov 22 12:21:25 2008
Subject:How to bind to specific interface with IO::Socket::Molticast?
Hello,

On a multi-homed host, I want to create a separate socket for each
multicast interface. So I have come up with the solution attached
below. This solution works fine, except for one problem: if a packet
is received on the given multicast-group, this packet is received on
_all_ sockets and not only on the one that is bound to the receiving
port.

Any hints how to tell IO::Socket::Multicast that it should deliver
the packet only to the socket that listens on the receiving interface?

BTW: this is ubuntu-8.10 with Linux 2.6.27-7-generic

#! /usr/bin/perl

use strict;
use warnings;

use IO::Handle;
use IO::Select;
use IO::Socket::INET;
use IO::Socket::Multicast;
use IO::Interface::Simple;

my $rdfds = IO::Select->new();

my @ssdp_server;
foreach my $if (IO::Interface::Simple->interfaces) {
my $adr=$if->address;
next unless $adr =~ /^(192|172)/;
next unless $if->is_multicast;

print "$adr\n";
my $socket = IO::Socket::Multicast->new (LocalAddr=>"239.255.255.250",
LocalPort=>1900,
ReuseAddr=>1) or die;
$socket->mcast_add("239.255.255.250", $adr);
$socket->mcast_if($adr);
$socket->mcast_ttl(4);
$socket->mcast_loopback(0);
$rdfds->add($socket);
}

while (1) {
my @ready=$rdfds->can_read (0);
foreach my $fh (@ready) {
print $fh->mcast_if, "\n";
$fh->recv(my $data, 1024);
# print "$data\n";
}
}
Navigate in group perl.libnet at sever nntp.perl.org
Previous Next





  
© No Copyright
You are free to use Anything, but please consult your advocate before doing so as this website
also list content from other sources which may be copyrighted.
Site Maintained by Zareef Ahmed
Powered By PHP Consultants