aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStuart Shelton <stuart@shelton.me>2014-10-04 22:45:51 +0100
committerStuart Shelton <stuart@shelton.me>2014-10-04 22:45:51 +0100
commit9b3c6e59b396d4dd5ccb8f6e0dff2795dafedbb0 (patch)
treea015f64c56b791809a2ca3828eca921e73de3516 /dev-perl
parentUpdate sys-apps/kmod-18-r1 (diff)
downloadsrcshelton-9b3c6e59b396d4dd5ccb8f6e0dff2795dafedbb0.tar.gz
srcshelton-9b3c6e59b396d4dd5ccb8f6e0dff2795dafedbb0.tar.bz2
srcshelton-9b3c6e59b396d4dd5ccb8f6e0dff2795dafedbb0.zip
Add dev-perl/IO-Socket-Multicast-1.12
Diffstat (limited to 'dev-perl')
-rw-r--r--dev-perl/IO-Socket-Multicast/IO-Socket-Multicast-1.12.ebuild33
-rw-r--r--dev-perl/IO-Socket-Multicast/Manifest5
-rw-r--r--dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-multicast-pureperl.patch466
-rw-r--r--dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-spelling.patch19
-rw-r--r--dev-perl/IO-Socket-Multicast/files/IO-Socket-Multicast-1.12-zero-byte-payload.patch11
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);