r27852 - in /trunk/libdanga-socket-perl: CHANGES META.yml debian/changelog lib/Danga/Socket.pm

gregoa at users.alioth.debian.org gregoa at users.alioth.debian.org
Sat Dec 6 18:47:41 UTC 2008


Author: gregoa
Date: Sat Dec  6 18:47:38 2008
New Revision: 27852

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

Modified:
    trunk/libdanga-socket-perl/CHANGES
    trunk/libdanga-socket-perl/META.yml
    trunk/libdanga-socket-perl/debian/changelog
    trunk/libdanga-socket-perl/lib/Danga/Socket.pm

Modified: trunk/libdanga-socket-perl/CHANGES
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libdanga-socket-perl/CHANGES?rev=27852&op=diff
==============================================================================
--- trunk/libdanga-socket-perl/CHANGES (original)
+++ trunk/libdanga-socket-perl/CHANGES Sat Dec  6 18:47:38 2008
@@ -1,3 +1,11 @@
+1.61 (2008-11-27)
+    -- IPv6 support.  At least enough to get Perlbal going.
+       Let me know if this is done incorrectly or non-portably!
+       (Brad Fitzpatrick; brad at danga.com).
+
+1.60
+    -- Keep watching for write after all writing is completed if user
+       specifically asked to watch_write (D. Leadbeater)
 
 1.59
    -- Don't keep watching for write after all writing is completed OK

Modified: trunk/libdanga-socket-perl/META.yml
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libdanga-socket-perl/META.yml?rev=27852&op=diff
==============================================================================
--- trunk/libdanga-socket-perl/META.yml (original)
+++ trunk/libdanga-socket-perl/META.yml Sat Dec  6 18:47:38 2008
@@ -1,7 +1,7 @@
 # http://module-build.sourceforge.net/META-spec.html
 #XXXXXXX This is a prototype!!!  It will change in the future!!! XXXXX#
 name:         Danga-Socket
-version:      1.59
+version:      1.61
 version_from: lib/Danga/Socket.pm
 installdirs:  site
 requires:

Modified: trunk/libdanga-socket-perl/debian/changelog
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libdanga-socket-perl/debian/changelog?rev=27852&op=diff
==============================================================================
--- trunk/libdanga-socket-perl/debian/changelog (original)
+++ trunk/libdanga-socket-perl/debian/changelog Sat Dec  6 18:47:38 2008
@@ -1,4 +1,4 @@
-libdanga-socket-perl (1.59-2) UNRELEASED; urgency=low
+libdanga-socket-perl (1.61-1) UNRELEASED; urgency=low
 
   [ Martín Ferrari ]
   * Updating my email address
@@ -7,6 +7,7 @@
   * debian/control: Changed: Switched Vcs-Browser field to ViewSVN
     (source stanza).
   * debian/control: Added: ${misc:Depends} to Depends: field.
+  * New upstream release.
 
  -- Martín Ferrari <tincho at debian.org>  Fri, 13 Jun 2008 00:04:49 +0000
 

Modified: trunk/libdanga-socket-perl/lib/Danga/Socket.pm
URL: http://svn.debian.org/wsvn/pkg-perl/trunk/libdanga-socket-perl/lib/Danga/Socket.pm?rev=27852&op=diff
==============================================================================
--- trunk/libdanga-socket-perl/lib/Danga/Socket.pm (original)
+++ trunk/libdanga-socket-perl/lib/Danga/Socket.pm Sat Dec  6 18:47:38 2008
@@ -100,7 +100,7 @@
 my $opt_bsd_resource = eval "use BSD::Resource; 1;";
 
 use vars qw{$VERSION};
-$VERSION = "1.59";
+$VERSION = "1.61";
 
 use warnings;
 no  warnings qw(deprecated);
@@ -112,10 +112,12 @@
             'write_buf',         # arrayref of scalars, scalarrefs, or coderefs to write
             'write_buf_offset',  # offset into first array of write_buf to start writing at
             'write_buf_size',    # total length of data in all write_buf items
+            'write_set_watch',   # bool: true if we internally set watch_write rather than by a subclass
             'read_push_back',    # arrayref of "pushed-back" read data the application didn't want
             'closed',            # bool: socket is closed
             'corked',            # bool: socket is corked
             'event_watch',       # bitmask of events the client is interested in (POLLIN,OUT,etc.)
+            'peer_v6',           # bool: cached; if peer is an IPv6 address
             'peer_ip',           # cached stringified IP address of $sock
             'peer_port',         # cached port number of $sock
             'local_ip',          # cached stringified IP address of local end of $sock
@@ -1039,6 +1041,7 @@
                     push @{$self->{write_buf}}, $bref;
                     $self->{write_buf_size} += $len;
                 }
+                $self->{write_set_watch} = 1 unless $self->{event_watch} & POLLOUT;
                 $self->watch_write(1);
                 return 0;
             } elsif ($! == ECONNRESET) {
@@ -1066,7 +1069,10 @@
                                                $written, $self->{fd}, $need_queue);
             $self->{write_buf_offset} = 0;
 
-            $self->watch_write(0) if $self->{event_watch} & POLLOUT;
+            if ($self->{write_set_watch}) {
+                $self->watch_write(0);
+                $self->{write_set_watch} = 0;
+            }
 
             # this was our only write, so we can return immediately
             # since we avoided incrementing the buffer size or
@@ -1084,6 +1090,7 @@
 
 sub on_incomplete_write {
     my Danga::Socket $self = shift;
+    $self->{write_set_watch} = 1 unless $self->{event_watch} & POLLOUT;
     $self->watch_write(1);
 }
 
@@ -1231,6 +1238,11 @@
     $event &= ~POLLOUT if ! $val;
     $event |=  POLLOUT if   $val;
 
+    if ($val && caller ne __PACKAGE__) {
+        # A subclass registered interest, it's now responsible for this.
+        $self->{write_set_watch} = 0;
+    }
+
     # If it changed, set it
     if ($event != $self->{event_watch}) {
         if ($HaveKQueue) {
@@ -1293,7 +1305,11 @@
     return _undef("peer_ip_string undef: getpeername") unless $pn;
 
     my ($port, $iaddr) = eval {
-        Socket::sockaddr_in($pn);
+        if (length($pn) >= 28) {
+            return Socket6::unpack_sockaddr_in6($pn);
+        } else {
+            return Socket::sockaddr_in($pn);
+        }
     };
 
     if ($@) {
@@ -1303,7 +1319,13 @@
 
     $self->{peer_port} = $port;
 
-    return $self->{peer_ip} = Socket::inet_ntoa($iaddr);
+    if (length($iaddr) == 4) {
+        return $self->{peer_ip} = Socket::inet_ntoa($iaddr);
+    } else {
+        $self->{peer_v6} = 1;
+        return $self->{peer_ip} = Socket6::inet_ntop(Socket6::AF_INET6(),
+                                                     $iaddr);
+    }
 }
 
 =head2 C<< $obj->peer_addr_string() >>
@@ -1314,8 +1336,11 @@
 =cut
 sub peer_addr_string {
     my Danga::Socket $self = shift;
-    my $ip = $self->peer_ip_string;
-    return $ip ? "$ip:$self->{peer_port}" : undef;
+    my $ip = $self->peer_ip_string
+        or return undef;
+    return $self->{peer_v6} ?
+        "[$ip]:$self->{peer_port}" :
+        "$ip:$self->{peer_port}";
 }
 
 =head2 C<< $obj->local_ip_string() >>




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