diff options
author | Stuart Shelton <stuart@shelton.me> | 2014-10-04 22:45:51 +0100 |
---|---|---|
committer | Stuart Shelton <stuart@shelton.me> | 2014-10-04 22:45:51 +0100 |
commit | 9b3c6e59b396d4dd5ccb8f6e0dff2795dafedbb0 (patch) | |
tree | a015f64c56b791809a2ca3828eca921e73de3516 /dev-perl | |
parent | Update sys-apps/kmod-18-r1 (diff) | |
download | srcshelton-9b3c6e59b396d4dd5ccb8f6e0dff2795dafedbb0.tar.gz srcshelton-9b3c6e59b396d4dd5ccb8f6e0dff2795dafedbb0.tar.bz2 srcshelton-9b3c6e59b396d4dd5ccb8f6e0dff2795dafedbb0.zip |
Add dev-perl/IO-Socket-Multicast-1.12
Diffstat (limited to 'dev-perl')
5 files changed, 534 insertions, 0 deletions
diff --git a/dev-perl/IO-Socket-Multicast/IO-Socket-Multicast-1.12.ebuild b/dev-perl/IO-Socket-Multicast/IO-Socket-Multicast-1.12.ebuild new file mode 100644 index 00000000..f14fbfdb --- /dev/null +++ b/dev-perl/IO-Socket-Multicast/IO-Socket-Multicast-1.12.ebuild @@ -0,0 +1,33 @@ +# Copyright 1999-2014 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/dev-perl/IO-Socket-IP/IO-Socket-IP-0.280.0.ebuild,v 1.2 2014/08/25 12:23:35 armin76 Exp $ + +EAPI=5 + +MODULE_AUTHOR=BRAMBLE +MODULE_VERSION=1.12 +inherit perl-module + +DESCRIPTION='Send and receive multicast messages' + +SLOT="0" +KEYWORDS="~amd64 ~hppa ~ppc ~ppc64 ~sparc ~x86" +IUSE="test" + +RDEPEND=" + dev-perl/IO-Interface +" +DEPEND="${RDEPEND} + virtual/perl-Module-Build + test? ( + dev-perl/Test-Pod + ) +" + +SRC_TEST="do" + +src_prepare() { + epatch "${FILESDIR}"/IO-Socket-Multicast-1.12-spelling.patch + epatch "${FILESDIR}"/IO-Socket-Multicast-1.12-zero-byte-payload.patch + epatch "${FILESDIR}"/IO-Socket-Multicast-1.12-multicast-pureperl.patch +} diff --git a/dev-perl/IO-Socket-Multicast/Manifest b/dev-perl/IO-Socket-Multicast/Manifest new file mode 100644 index 00000000..bd064990 --- /dev/null +++ b/dev-perl/IO-Socket-Multicast/Manifest @@ -0,0 +1,5 @@ +AUX IO-Socket-Multicast-1.12-multicast-pureperl.patch 12696 SHA256 b48fe471cdec3ec83e14cb56788da1a5b8682e89d35c2fd64385a02d4e4bc358 SHA512 00ffedb1d9d6c19e68c99ac1c2af8e8f4c8e57d8372a583d9a611940bc74e647074113f3267c54b74748b0da1911299ad2c847dd9150d052744dbd2e8d4bb6c7 WHIRLPOOL e6e67d73900f8067c9d5ce0583e578f7bf4c7d48b0122835cf628aa56e513aaa6fed263863c8c73637b6a32d748939bb7648fd4543490f42d3b32cecc1477a88 +AUX IO-Socket-Multicast-1.12-spelling.patch 778 SHA256 4dd3b1bb9783d1d9a8ff596dd04c55b2e896acae6a9184e3101d76e0da78b45b SHA512 e10be45bf97c52df77f96fdf5c429ad15f1438633f19749be1f4aec315d5137ae8f77c37e361ecc0369a9e0b7795dab2707e95498c46ce624c47034534729b74 WHIRLPOOL 2b23baa8f87635afa7e7ddd84fde594f9cef43058f4f680380b921c88305c41f8410b6e95bb1fbf561658d77c15e73a757238fc3ff425e3a4694737baca9c27d +AUX IO-Socket-Multicast-1.12-zero-byte-payload.patch 757 SHA256 08d7d131b9447b654a9ab72032eea5dd9b891d936bce85ad129048827a1d3617 SHA512 a7c91581d16da7726d325fc6d779a5054353b802ee4cf72309d95db5ecb265f221dfae52b77b9aff1266bba864cbfc6c00ce38e60094d1433b0fa027e19e2102 WHIRLPOOL 22f65391a365815a64fb55abfde0841b0fcc00c003b4c79abf090346984301fbd2f4d21ebfc6aa5ae9996e9b9b3604aa2b3f21bbafd6d8b6b0565f9e106b8f28 +DIST IO-Socket-Multicast-1.12.tar.gz 11685 SHA256 70e8af4aa21d19bab5edd9f43a6b3d6277748a65145d46ff0ea2ae4c59495c72 SHA512 7512a48b56aa12c04ba082ed7ab44f573d3cd2ab2b3b377a5faeb93499220c65d8ed7d99612bd0c6f3b15e574438907389bd1406f55fe3bbff878cccb03848a3 WHIRLPOOL 741853035f02c7bb73fa7d277d78dda3e13d75a8019ecdba3c6ac97c9330ccad47b54fe51816e925b21cebd44d61a1ad57dbd0b59a67862bd92bf77e46581590 +EBUILD IO-Socket-Multicast-1.12.ebuild 779 SHA256 be8e578ce486c303390689789026ee3880969d0840f4fe01a23393083d234e8a SHA512 72a6b120c3ad910ec23cff68cac3b493206469fd83d4bc4c130675759d6e6dadef8e467daf8fc1f41985e1381c066e03341cee1cbec7266571e17dec028c71c7 WHIRLPOOL c16ec0526919ae273bbf59d064a82f259ee3ea6dc2835ea5ff5ea82fef1cb3cdd77ac40b25e9e86851ce29ae0fa2c053e95626b126d22421f5bb1826a78f7073 diff --git a/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-multicast-pureperl.patch b/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-multicast-pureperl.patch new file mode 100644 index 00000000..4df2e511 --- /dev/null +++ b/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-multicast-pureperl.patch @@ -0,0 +1,466 @@ +=== modified file 'MANIFEST' +--- MANIFEST 2012-05-18 14:50:33 +0000 ++++ MANIFEST 2012-05-18 16:22:51 +0000 +@@ -4,7 +4,6 @@ + lib/IO/Socket/Multicast.pm + Makefile.PL + MANIFEST This list of files +-Multicast.xs + README + t/01_use.t + t/03_multicast.t + +=== modified file 'Makefile.PL' +--- Makefile.PL 2012-05-18 14:50:33 +0000 ++++ Makefile.PL 2012-05-18 15:04:06 +0000 +@@ -19,6 +19,7 @@ + INC => '', # e.g., '-I/usr/include/other' + PREREQ_PM => { + $^O eq 'MSWin32' ? () : ( 'IO::Interface' => 0.94 ), ++ 'Socket' => '2.001_001', + }, + ($ExtUtils::MakeMaker::VERSION ge '6.30_00' ? ( + LICENSE => 'perl', + +=== removed file 'Multicast.xs' +--- Multicast.xs 2012-05-18 14:50:33 +0000 ++++ Multicast.xs 1970-01-01 00:00:00 +0000 +@@ -1,310 +0,0 @@ +-#ifdef WIN32 +-#include <winsock2.h> +-#include <ws2tcpip.h> +-#endif +-#include "EXTERN.h" +-#include "perl.h" +-#include "XSUB.h" +-#include "config.h" +- +-#include <stdio.h> +-#include <errno.h> +-#ifndef WIN32 +-#include <netinet/in.h> +-#endif +-#include <sys/socket.h> +- +-#ifdef PerlIO +-typedef PerlIO * InputStream; +-#else +-#define PERLIO_IS_STDIO 1 +-typedef FILE * InputStream; +-#define PerlIO_fileno(f) fileno(f) +-#endif +- +-static int +-not_here(char *s) +-{ +- croak("%s not implemented on this architecture", s); +- return -1; +-} +- +-/* Recent versions of Win32 platforms are confused about these constants due to +- problems in the order of socket header file importation +- +-#ifdef WIN32 +-#if (PERL_REVISION >=5) && (PERL_VERSION >= 8) && (PERL_SUBVERSION >= 6) +-#undef IP_OPTIONS +-#undef IP_HDRINCL +-#undef IP_TOS +-#undef IP_TTL +-#undef IP_MULTICAST_IF +-#undef IP_MULTICAST_TTL +-#undef IP_MULTICAST_LOOP +-#undef IP_ADD_MEMBERSHIP +-#undef IP_DROP_MEMBERSHIP +-#undef IP_DONTFRAGMENT +- +-#define IP_OPTIONS 1 +-#define IP_HDRINCL 2 +-#define IP_TOS 3 +-#define IP_TTL 4 +-#define IP_MULTICAST_IF 9 +-#define IP_MULTICAST_TTL 10 +-#define IP_MULTICAST_LOOP 11 +-#define IP_ADD_MEMBERSHIP 12 +-#define IP_DROP_MEMBERSHIP 13 +-#define IP_DONTFRAGMENT 14 +-#endif +-#endif +- +-*/ +- +-#ifndef HAS_INET_ATON +-static int +-my_inet_aton(register const char *cp, struct in_addr *addr) +-{ +- dTHX; +- register U32 val; +- register int base; +- register char c; +- int nparts; +- const char *s; +- unsigned int parts[4]; +- register unsigned int *pp = parts; +- +- if (!cp || !*cp) +- return 0; +- for (;;) { +- /* +- * Collect number up to ``.''. +- * Values are specified as for C: +- * 0x=hex, 0=octal, other=decimal. +- */ +- val = 0; base = 10; +- if (*cp == '0') { +- if (*++cp == 'x' || *cp == 'X') +- base = 16, cp++; +- else +- base = 8; +- } +- while ((c = *cp) != '\0') { +- if (isDIGIT(c)) { +- val = (val * base) + (c - '0'); +- cp++; +- continue; +- } +- if (base == 16 && (s=strchr(PL_hexdigit,c))) { +- val = (val << 4) + +- ((s - PL_hexdigit) & 15); +- cp++; +- continue; +- } +- break; +- } +- if (*cp == '.') { +- /* +- * Internet format: +- * a.b.c.d +- * a.b.c (with c treated as 16-bits) +- * a.b (with b treated as 24 bits) +- */ +- if (pp >= parts + 3 || val > 0xff) +- return 0; +- *pp++ = val, cp++; +- } else +- break; +- } +- /* +- * Check for trailing characters. +- */ +- if (*cp && !isSPACE(*cp)) +- return 0; +- /* +- * Concoct the address according to +- * the number of parts specified. +- */ +- nparts = pp - parts + 1; /* force to an int for switch() */ +- switch (nparts) { +- +- case 1: /* a -- 32 bits */ +- break; +- +- case 2: /* a.b -- 8.24 bits */ +- if (val > 0xffffff) +- return 0; +- val |= parts[0] << 24; +- break; +- +- case 3: /* a.b.c -- 8.8.16 bits */ +- if (val > 0xffff) +- return 0; +- val |= (parts[0] << 24) | (parts[1] << 16); +- break; +- +- case 4: /* a.b.c.d -- 8.8.8.8 bits */ +- if (val > 0xff) +- return 0; +- val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8); +- break; +- } +- addr->s_addr = htonl(val); +- return 1; +-} +- +-#undef inet_aton +-#define inet_aton my_inet_aton +- +-#endif +- +- +-MODULE = IO::Socket::Multicast PACKAGE = IO::Socket::Multicast +- +- +-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; +- } +- if (setsockopt(fd,IPPROTO_IP,IP_ADD_MEMBERSHIP,(void*) &mreq,sizeof(mreq)) < 0) +- XSRETURN_EMPTY; +- else +- XSRETURN_YES; +- } +- +-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); +- } +- if (setsockopt(fd,IPPROTO_IP,IP_DROP_MEMBERSHIP,(void*)&mreq,sizeof(mreq)) < 0) +- XSRETURN_EMPTY; +- else +- XSRETURN_YES; +- } +- +-int +-mcast_loopback(sock,...) +- InputStream sock +- PROTOTYPE: $;$ +- PREINIT: +- int fd; +- int len; +- char previous,loopback; +- CODE: +- { +- fd = PerlIO_fileno(sock); +- /* get previous value of flag */ +- len = sizeof(previous); +- if (getsockopt(fd,IPPROTO_IP,IP_MULTICAST_LOOP,(void*)&previous,&len) < 0) +- XSRETURN_UNDEF; +- +- if (items > 1) { /* set value */ +- loopback = SvIV(ST(1)); +- if (setsockopt(fd,IPPROTO_IP,IP_MULTICAST_LOOP,(void*)&loopback,sizeof(loopback)) < 0) +- XSRETURN_UNDEF; +- } +- RETVAL = previous; +- } +- OUTPUT: +- RETVAL +- +-int +-mcast_ttl(sock,...) +- InputStream sock +- PROTOTYPE: $;$ +- PREINIT: +- int fd; +- int len; +- char previous,ttl; +- CODE: +- { +- fd = PerlIO_fileno(sock); +- /* get previous value of flag */ +- len = sizeof(previous); +- if (getsockopt(fd,IPPROTO_IP,IP_MULTICAST_TTL,(void*)&previous,&len) < 0) +- XSRETURN_UNDEF; +- +- if (items > 1) { /* set value */ +- ttl = SvIV(ST(1)); +- if (setsockopt(fd,IPPROTO_IP,IP_MULTICAST_TTL,(void*)&ttl,sizeof(ttl)) < 0) +- XSRETURN_UNDEF; +- } +- RETVAL = previous; +- } +- OUTPUT: +- RETVAL +- +-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; +- } else { /* getting interface address */ +- +- /* freakin' bug in Linux -- IP_MULTICAST_IF returns a struct mreqn rather than +- an in_addr (contrary to Stevens and the setsockopt()! +- We work around this by looking at size of returned thing and doing a +- ugly cast */ +- +- len = sizeof(mreq); +- if (getsockopt(fd,IPPROTO_IP,IP_MULTICAST_IF,(void*) &mreq,&len) != 0) +- XSRETURN_EMPTY; +- +- if (len == sizeof(mreq)) { +- XPUSHs(sv_2mortal(newSVpv(inet_ntoa(mreq.imr_interface),0))); +- } else if (len == sizeof (struct in_addr)) { +- XPUSHs(sv_2mortal(newSVpv(inet_ntoa(*(struct in_addr*)&mreq),0))); +- } else { +- croak("getsockopt() returned a data type I don't understand"); +- } +- +- } +- } +- + +=== modified file 'lib/IO/Socket/Multicast.pm' +--- lib/IO/Socket/Multicast.pm 2012-05-18 14:50:33 +0000 ++++ lib/IO/Socket/Multicast.pm 2012-05-18 16:17:28 +0000 +@@ -4,7 +4,10 @@ + use strict;
+ use Carp 'croak';
+ use Exporter ();
+-use DynaLoader ();
++use Socket qw(
++ inet_aton pack_ip_mreq unpack_ip_mreq
++ IPPROTO_IP IP_ADD_MEMBERSHIP IP_DROP_MEMBERSHIP IP_MULTICAST_TTL IP_MULTICAST_LOOP IP_MULTICAST_IF
++);
+ use IO::Socket;
+ BEGIN {
+ eval "use IO::Interface 0.94 'IFF_MULTICAST';";
+@@ -23,7 +26,6 @@ + $VERSION = '1.12';
+ @ISA = qw(
+ Exporter
+- DynaLoader
+ IO::Socket::INET
+ );
+ @EXPORT = ( );
+@@ -34,7 +36,10 @@ + @EXPORT_OK = @{ $EXPORT_TAGS{'all'} };
+ }
+
+-my $IP = '\d+\.\d+\.\d+\.\d+';
++use constant MATCH_IP => qr/\d+\.\d+\.\d+\.\d+/;
++use constant MATCH_IPPORT => qr/(${\MATCH_IP}):(\d+)/;
++
++use constant SIZEOF_MREQ => length( pack_ip_mreq( "\0\0\0\0", "\0\0\0\0" ) );
+
+ sub import {
+ Socket->export_to_level(1,@_);
+@@ -55,36 +60,43 @@ +
+ sub mcast_add {
+ my $sock = shift;
+- my $group = shift || croak 'usage: $sock->mcast_add($mcast_addr [,$interface])';
+- $group = inet_ntoa($group) unless $group =~ /^$IP$/o;
+- my $interface = get_if_addr($sock,shift);
+- return $sock->_mcast_add($group,$interface);
++ my ($multiaddr, $interface) = @_ or
++ croak 'usage: $sock->mcast_add($mcast_addr [,$interface])';
++ $multiaddr = inet_aton($multiaddr) if $multiaddr =~ MATCH_IP;
++ $interface = inet_aton(get_if_addr($sock,$interface));
++ return $sock->setsockopt(IPPROTO_IP,IP_ADD_MEMBERSHIP,pack_ip_mreq($multiaddr,$interface));
+ }
+
+ sub mcast_drop {
+ my $sock = shift;
+- my $group = shift || croak 'usage: $sock->mcast_add($mcast_addr [,$interface])';
+- $group = inet_ntoa($group) unless $group =~ /^$IP$/o;
+- my $interface = get_if_addr($sock,shift);
+- return $sock->_mcast_drop($group,$interface);
++ my ($multiaddr, $interface) = @_ or
++ croak 'usage: $sock->mcast_drop($mcast_addr [,$interface])';
++ $multiaddr = inet_aton($multiaddr) if $multiaddr =~ MATCH_IP;
++ $interface = inet_aton(get_if_addr($sock,$interface));
++ return $sock->setsockopt(IPPROTO_IP,IP_DROP_MEMBERSHIP,pack_ip_mreq($multiaddr,$interface));
+ }
+
+ sub mcast_if {
+ my $sock = shift;
+
+- my $previous = $sock->_mcast_if;
++ # IO::Socket->getsockopt will try to unpack "i" here; we must defeat it. This sucks :(
++ my $prev_mreq = getsockopt($sock,IPPROTO_IP,IP_MULTICAST_IF);
++ return undef unless defined $prev_mreq;
++ # Some OSes return an mreq, some return a plain inaddr
++ my $previous = length($prev_mreq) == SIZEOF_MREQ ? inet_ntoa((unpack_ip_mreq($prev_mreq))[1])
++ : inet_ntoa($prev_mreq);
+ $previous = $sock->addr_to_interface($previous)
+ if $sock->can('addr_to_interface');
+ return $previous unless @_;
+
+ my $interface = get_if_addr($sock,shift);
+- return $sock->_mcast_if($interface) ? $previous : undef;
++ return $sock->setsockopt(IPPROTO_IP,IP_MULTICAST_IF,inet_aton($interface)) ? $previous : undef;
+ }
+
+ sub get_if_addr {
+ my $sock = shift;
+ return '0.0.0.0' unless defined (my $interface = shift);
+- return $interface if $interface =~ /^$IP$/;
++ return $interface if $interface =~ MATCH_IP;
+ return $interface if length $interface == 16;
+ croak "IO::Interface module not available; use IP addr for interface"
+ unless $sock->can('if_addr');
+@@ -99,7 +111,7 @@ + my $sock = shift;
+ my $prev = ${*$sock}{'io_socket_mcast_dest'};
+ if (my $dest = shift) {
+- $dest = sockaddr_in($2,inet_aton($1)) if $dest =~ /^($IP):(\d+)$/;
++ $dest = sockaddr_in($2,inet_aton($1)) if $dest =~ MATCH_IPPORT;
+ croak "invalid destination address" unless length($dest) == 16;
+ ${*$sock}{'io_socket_mcast_dest'} = $dest;
+ }
+@@ -114,7 +126,25 @@ + return send($sock,$data,0,$dest);
+ }
+
+-bootstrap IO::Socket::Multicast $VERSION;
++sub mcast_ttl {
++ my $sock = shift;
++ # IO::Socket automatically unpacks for us
++ my $previous = $sock->getsockopt(IPPROTO_IP,IP_MULTICAST_TTL);
++ if(@_) {
++ defined $sock->setsockopt(IPPROTO_IP,IP_MULTICAST_TTL,pack("C",shift)) or return undef;
++ }
++ return $previous;
++}
++
++sub mcast_loopback {
++ my $sock = shift;
++ # IO::Socket automatically unpacks for us
++ my $previous = $sock->getsockopt(IPPROTO_IP,IP_MULTICAST_LOOP);
++ if(@_) {
++ defined $sock->setsockopt(IPPROTO_IP,IP_MULTICAST_LOOP,pack("C",shift)) or return undef;
++ }
++ return $previous;
++}
+
+ 1;
+
+ diff --git a/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-spelling.patch b/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-spelling.patch new file mode 100644 index 00000000..dea89b64 --- /dev/null +++ b/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-spelling.patch @@ -0,0 +1,19 @@ +Description: fix a spelling mistake +Origin: vendor +Bug-Debian: http://bugs.debian.org/607647 +Forwarded: no +Author: Jakub Wilk <jwilk@debian.org> +Reviewed-by: gregor herrmann <gregoa@debian.org> +Last-Update: 2011-01-15 + +--- a/lib/IO/Socket/Multicast.pm ++++ b/lib/IO/Socket/Multicast.pm +@@ -88,7 +88,7 @@ sub get_if_addr { + return $interface if length $interface == 16;
+ croak "IO::Interface module not available; use IP addr for interface"
+ unless $sock->can('if_addr');
+- croak "unknown or unconfigured interace $interface"
++ croak "unknown or unconfigured interface $interface"
+ unless my $addr = $sock->if_addr($interface);
+ croak "interface is not multicast capable"
+ unless $interface eq 'any' or ($sock->if_flags($interface) & IFF_MULTICAST());
diff --git a/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-zero-byte-payload.patch b/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-zero-byte-payload.patch new file mode 100644 index 00000000..23250e4b --- /dev/null +++ b/dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-zero-byte-payload.patch @@ -0,0 +1,11 @@ +--- /var/tmp/portage/dev-perl/IO-Socket-Multicast-1.12/work/IO-Socket-Multicast-1.12/lib/IO/Socket/Multicast.pm.dist 2014-10-04 22:35:49.273194665 +0100 ++++ /var/tmp/portage/dev-perl/IO-Socket-Multicast-1.12/work/IO-Socket-Multicast-1.12/lib/IO/Socket/Multicast.pm 2014-10-04 22:36:40.364266647 +0100 +@@ -120,7 +120,7 @@ sub mcast_dest { +
+ sub mcast_send {
+ my $sock = shift;
+- my $data = shift || croak 'usage: $sock->mcast_send($data [,$address])';
++ my $data = shift # || croak 'usage: $sock->mcast_send($data [,$address])'; # Allow packets with a zero-byte payload
+ $sock->mcast_dest(shift) if @_;
+ my $dest = $sock->mcast_dest || croak "no destination specified with mcast_send() or mcast_dest()";
+ return send($sock,$data,0,$dest);
|