r29804 - in /trunk/libanyevent-perl: Changes META.yml Makefile.PL debian/changelog lib/AnyEvent.pm lib/AnyEvent/DNS.pm lib/AnyEvent/Handle.pm lib/AnyEvent/Impl/Perl.pm lib/AnyEvent/Socket.pm lib/AnyEvent/Util.pm

mxey-guest at users.alioth.debian.org mxey-guest at users.alioth.debian.org
Sun Jan 18 20:55:04 UTC 2009


Author: mxey-guest
Date: Sun Jan 18 20:55:01 2009
New Revision: 29804

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=29804
Log:
New upstream release

Modified:
    trunk/libanyevent-perl/Changes
    trunk/libanyevent-perl/META.yml
    trunk/libanyevent-perl/Makefile.PL
    trunk/libanyevent-perl/debian/changelog
    trunk/libanyevent-perl/lib/AnyEvent.pm
    trunk/libanyevent-perl/lib/AnyEvent/DNS.pm
    trunk/libanyevent-perl/lib/AnyEvent/Handle.pm
    trunk/libanyevent-perl/lib/AnyEvent/Impl/Perl.pm
    trunk/libanyevent-perl/lib/AnyEvent/Socket.pm
    trunk/libanyevent-perl/lib/AnyEvent/Util.pm

Modified: trunk/libanyevent-perl/Changes
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/Changes?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/Changes (original)
+++ trunk/libanyevent-perl/Changes Sun Jan 18 20:55:01 2009
@@ -1,4 +1,12 @@
 Revision history for Perl extension AnyEvent.
+
+4.331 Tue Jan  6 21:07:25 CET 2009
+	- socketpair fails on many vista machines because vista has
+          completely broken accept/getpeername and getsockname functions,
+          so we provide our own socketpair emulation that kind of works
+          (AnyEvent::Util::portable_pipe).
+        - new function: AnyEvent::Util::portable_socketpair.
+	- take advantage of the Guard module if it exists.
 
 4.33 Fri Nov 21 02:35:40 CET 2008
 	- AnyEvent::Strict did errornously flag a fileno of 0 as

Modified: trunk/libanyevent-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/META.yml?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/META.yml (original)
+++ trunk/libanyevent-perl/META.yml Sun Jan 18 20:55:01 2009
@@ -1,6 +1,6 @@
 --- #YAML:1.0
 name:                AnyEvent
-version:             4.33
+version:             4.331
 abstract:            ~
 license:             ~
 author:              ~
@@ -16,4 +16,5 @@
   JSON: 2.09
   JSON::XS 2.2
   EV: 4.05
+  Guard: 0.5
     

Modified: trunk/libanyevent-perl/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/Makefile.PL?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/Makefile.PL (original)
+++ trunk/libanyevent-perl/Makefile.PL Sun Jan 18 20:55:01 2009
@@ -34,6 +34,7 @@
   JSON: 2.09
   JSON::XS 2.2
   EV: 4.05
+  Guard: 0.5
     },
 );
 

Modified: trunk/libanyevent-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/debian/changelog?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/debian/changelog (original)
+++ trunk/libanyevent-perl/debian/changelog Sun Jan 18 20:55:01 2009
@@ -1,5 +1,5 @@
-libanyevent-perl (4.33-1) UNRELEASED; urgency=low
+libanyevent-perl (4.331-1) UNRELEASED; urgency=low
 
   * Initial Release (closes: #496904).
 
- -- Maximilian Gaß <mxey at cloudconnected.org>  Sun, 30 Nov 2008 18:22:35 +0100
+ -- Maximilian Gaß <mxey at cloudconnected.org>  Sun, 18 Jan 2009 21:54:15 +0100

Modified: trunk/libanyevent-perl/lib/AnyEvent.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/lib/AnyEvent.pm?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/lib/AnyEvent.pm (original)
+++ trunk/libanyevent-perl/lib/AnyEvent.pm Sun Jan 18 20:55:01 2009
@@ -863,7 +863,7 @@
 
 use Carp;
 
-our $VERSION = 4.33;
+our $VERSION = 4.331;
 our $MODEL;
 
 our $AUTOLOAD;

Modified: trunk/libanyevent-perl/lib/AnyEvent/DNS.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/lib/AnyEvent/DNS.pm?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/lib/AnyEvent/DNS.pm (original)
+++ trunk/libanyevent-perl/lib/AnyEvent/DNS.pm Sun Jan 18 20:55:01 2009
@@ -37,7 +37,7 @@
 use AnyEvent::Handle ();
 use AnyEvent::Util qw(AF_INET6);
 
-our $VERSION = 4.33;
+our $VERSION = 4.331;
 
 our @DNS_FALLBACK = (v208.67.220.220, v208.67.222.222);
 

Modified: trunk/libanyevent-perl/lib/AnyEvent/Handle.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/lib/AnyEvent/Handle.pm?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/lib/AnyEvent/Handle.pm (original)
+++ trunk/libanyevent-perl/lib/AnyEvent/Handle.pm Sun Jan 18 20:55:01 2009
@@ -16,7 +16,7 @@
 
 =cut
 
-our $VERSION = 4.33;
+our $VERSION = 4.331;
 
 =head1 SYNOPSIS
 
@@ -29,7 +29,7 @@
       AnyEvent::Handle->new (
          fh => \*STDIN,
          on_eof => sub {
-            $cv->broadcast;
+            $cv->send;
          },
       );
 

Modified: trunk/libanyevent-perl/lib/AnyEvent/Impl/Perl.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/lib/AnyEvent/Impl/Perl.pm?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/lib/AnyEvent/Impl/Perl.pm (original)
+++ trunk/libanyevent-perl/lib/AnyEvent/Impl/Perl.pm Sun Jan 18 20:55:01 2009
@@ -91,7 +91,7 @@
 use AnyEvent ();
 use AnyEvent::Util ();
 
-our $VERSION = 4.33;
+our $VERSION = 4.331;
 
 our ($NOW, $MNOW);
 

Modified: trunk/libanyevent-perl/lib/AnyEvent/Socket.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/lib/AnyEvent/Socket.pm?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/lib/AnyEvent/Socket.pm (original)
+++ trunk/libanyevent-perl/lib/AnyEvent/Socket.pm Sun Jan 18 20:55:01 2009
@@ -59,7 +59,7 @@
    tcp_connect
 );
 
-our $VERSION = 4.33;
+our $VERSION = 4.331;
 
 =item $ipn = parse_ipv4 $dotted_quad
 

Modified: trunk/libanyevent-perl/lib/AnyEvent/Util.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libanyevent-perl/lib/AnyEvent/Util.pm?rev=29804&op=diff
==============================================================================
--- trunk/libanyevent-perl/lib/AnyEvent/Util.pm (original)
+++ trunk/libanyevent-perl/lib/AnyEvent/Util.pm Sun Jan 18 20:55:01 2009
@@ -31,10 +31,10 @@
 
 use base 'Exporter';
 
-our @EXPORT = qw(fh_nonblocking guard fork_call portable_pipe);
+our @EXPORT = qw(fh_nonblocking guard fork_call portable_pipe portable_socketpair);
 our @EXPORT_OK = qw(AF_INET6 WSAEWOULDBLOCK WSAEINPROGRESS WSAEINVAL WSAWOULDBLOCK);
 
-our $VERSION = 4.33;
+our $VERSION = 4.331;
 
 BEGIN {
    my $posix = 1 * eval { local $SIG{__DIE__}; require POSIX };
@@ -69,7 +69,7 @@
    if (AnyEvent::WIN32) {
       eval "sub WSAEINVAL()      { 10022 }";
       eval "sub WSAEWOULDBLOCK() { 10035 }";
-      eval "sub WSAWOULDBLOCK() { 10035 }"; # TODO remove here ands from @export_ok
+      eval "sub WSAWOULDBLOCK() { 10035 }"; # TODO remove here and from @export_ok
       eval "sub WSAEINPROGRESS() { 10036 }";
    } else {
       # these should never match any errno value
@@ -84,31 +84,96 @@
 
 Calling C<pipe> in Perl is portable - except it doesn't really work on
 sucky windows platforms (at least not with most perls - cygwin's perl
-notably works fine).
-
-On that platform, you actually get two file handles you cannot use select
-on.
+notably works fine): On windows, you actually get two file handles you
+cannot use select on.
 
 This function gives you a pipe that actually works even on the broken
-Windows platform (by creating a pair of TCP sockets, so do not expect any
+windows platform (by creating a pair of TCP sockets, so do not expect any
 speed from that).
 
+See portable_socketpair, below, for a bidirectional "pipe".
+
 Returns the empty list on any errors.
 
-=cut
+=item ($fh1, $fh2) = portable_socketpair
+
+Just like C<portable_pipe>, above, but returns a bidirectional pipe
+(usually by calling socketpair to create a local loopback socket).
+
+Returns the empty list on any errors.
+
+=cut
+
+sub _win32_socketpair {
+   # perl's socketpair emulation fails on many vista machines, because
+   # vista returns fantasy port numbers.
+
+   for (1..10) {
+      socket my $l, &Socket::AF_INET, &Socket::SOCK_STREAM, 0
+         or next;
+
+      bind $l, Socket::pack_sockaddr_in 0, "\x7f\x00\x00\x01"
+         or next;
+
+      my $sa = getsockname $l
+         or next;
+
+      listen $l, 1
+         or next;
+
+      socket my $r, &Socket::AF_INET, &Socket::SOCK_STREAM, 0
+         or next;
+
+      bind $r, Socket::pack_sockaddr_in 0, "\x7f\x00\x00\x01"
+         or next;
+
+      connect $r, $sa
+         or next;
+
+      accept my $w, $l
+         or next;
+
+      # vista has completely broken peername/sockname that return
+      # fantasy ports. this combo seems to work, though.
+      #
+      (Socket::unpack_sockaddr_in getpeername $r)[0]
+      == (Socket::unpack_sockaddr_in getsockname $w)[0]
+         or (($! = WSAEINVAL), next);
+
+      # vista example (you can't make this shit up...):
+      #(Socket::unpack_sockaddr_in getsockname $r)[0] == 53364
+      #(Socket::unpack_sockaddr_in getpeername $r)[0] == 53363
+      #(Socket::unpack_sockaddr_in getsockname $w)[0] == 53363
+      #(Socket::unpack_sockaddr_in getpeername $w)[0] == 53365
+
+      return ($r, $w);
+   }
+
+   ()
+}
 
 sub portable_pipe() {
-   my ($r, $w);
-
    if (AnyEvent::WIN32) {
-      socketpair $r, $w, &Socket::AF_UNIX, &Socket::SOCK_STREAM, 0
-         or return;
+      return _win32_socketpair;
    } else {
+      my ($r, $w);
+
       pipe $r, $w
          or return;
-   }
-
-   ($r, $w)
+
+      return ($r, $w);
+   }
+}
+
+sub portable_socketpair() {
+   if (AnyEvent::WIN32) {
+      return _win32_socketpair;
+   } else {
+      socketpair my $fh1, my $fh2, &Socket::AF_UNIX, &Socket::SOCK_STREAM, &Socket::PF_UNSPEC
+         or return;
+
+      return ($fh1, $fh2)
+   }
 }
 
 =item fork_call { CODE } @args, $cb->(@res)
@@ -319,6 +384,9 @@
 This is often handy in continuation-passing style code to clean up some
 resource regardless of where you break out of a process.
 
+The L<Guard> module will be used to implement this function, if it is
+available. Otherwise a pure-perl implementation is used.
+
 You can call one method on the returned object:
 
 =item $guard->cancel
@@ -328,23 +396,29 @@
 
 =cut
 
-sub AnyEvent::Util::Guard::DESTROY {
-   local $@;
-
-   eval {
-      local $SIG{__DIE__};
-      ${$_[0]}->();
-   };
-
-   warn "runtime error in AnyEvent::guard callback: $@" if $@;
-}
-
-sub AnyEvent::Util::Guard::cancel($) {
-   ${$_[0]} = sub { };
-}
-
-sub guard(&) {
-   bless \(my $cb = shift), AnyEvent::Util::Guard::
+BEGIN {
+   if (eval "use Guard 0.5; 1") {
+      *guard = \&Guard::guard;
+   } else {
+      *AnyEvent::Util::Guard::DESTROY = sub {
+         local $@;
+
+         eval {
+            local $SIG{__DIE__};
+            ${$_[0]}->();
+         };
+
+         warn "runtime error in AnyEvent::guard callback: $@" if $@;
+      };
+
+      *AnyEvent::Util::Guard::cancel = sub ($) {
+         ${$_[0]} = sub { };
+      };
+
+      *guard = sub (&) {
+         bless \(my $cb = shift), AnyEvent::Util::Guard::
+      }
+   }
 }
 
 1;




More information about the Pkg-perl-cvs-commits mailing list