Changeset 1307

Show
Ignore:
Timestamp:
10/16/09 01:54:04 (6 weeks ago)
Author:
dormando
Message:

Upgrade bundled Danga::Socket

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/server/lib/mogdeps/Danga/Socket.pm

    r1087 r1307  
    101101 
    102102use vars qw{$VERSION}; 
    103 $VERSION = "1.57"; 
     103$VERSION = "1.61"; 
    104104 
    105105use warnings; 
     
    113113            'write_buf_offset',  # offset into first array of write_buf to start writing at 
    114114            'write_buf_size',    # total length of data in all write_buf items 
     115            'write_set_watch',   # bool: true if we internally set watch_write rather than by a subclass 
    115116            'read_push_back',    # arrayref of "pushed-back" read data the application didn't want 
    116117            'closed',            # bool: socket is closed 
    117118            'corked',            # bool: socket is corked 
    118119            'event_watch',       # bitmask of events the client is interested in (POLLIN,OUT,etc.) 
     120            'peer_v6',           # bool: cached; if peer is an IPv6 address 
    119121            'peer_ip',           # cached stringified IP address of $sock 
    120122            'peer_port',         # cached port number of $sock 
     
    186188    $DoneInit = 0; 
    187189 
     190    POSIX::close($Epoll)  if defined $Epoll  && $Epoll  >= 0; 
     191    POSIX::close($KQueue) if defined $KQueue && $KQueue >= 0; 
     192     
    188193    *EventLoop = *FirstTimeEventLoop; 
    189194} 
     
    10371042                    $self->{write_buf_size} += $len; 
    10381043                } 
     1044                $self->{write_set_watch} = 1 unless $self->{event_watch} & POLLOUT; 
    10391045                $self->watch_write(1); 
    10401046                return 0; 
     
    10641070            $self->{write_buf_offset} = 0; 
    10651071 
     1072            if ($self->{write_set_watch}) { 
     1073                $self->watch_write(0); 
     1074                $self->{write_set_watch} = 0; 
     1075            } 
     1076 
    10661077            # this was our only write, so we can return immediately 
    10671078            # since we avoided incrementing the buffer size or 
     
    10801091sub on_incomplete_write { 
    10811092    my Danga::Socket $self = shift; 
     1093    $self->{write_set_watch} = 1 unless $self->{event_watch} & POLLOUT; 
    10821094    $self->watch_write(1); 
    10831095} 
     
    12271239    $event |=  POLLOUT if   $val; 
    12281240 
     1241    if ($val && caller ne __PACKAGE__) { 
     1242        # A subclass registered interest, it's now responsible for this. 
     1243        $self->{write_set_watch} = 0; 
     1244    } 
     1245 
    12291246    # If it changed, set it 
    12301247    if ($event != $self->{event_watch}) { 
     
    12891306 
    12901307    my ($port, $iaddr) = eval { 
    1291         Socket::sockaddr_in($pn); 
     1308        if (length($pn) >= 28) { 
     1309            return Socket6::unpack_sockaddr_in6($pn); 
     1310        } else { 
     1311            return Socket::sockaddr_in($pn); 
     1312        } 
    12921313    }; 
    12931314 
     
    12991320    $self->{peer_port} = $port; 
    13001321 
    1301     return $self->{peer_ip} = Socket::inet_ntoa($iaddr); 
     1322    if (length($iaddr) == 4) { 
     1323        return $self->{peer_ip} = Socket::inet_ntoa($iaddr); 
     1324    } else { 
     1325        $self->{peer_v6} = 1; 
     1326        return $self->{peer_ip} = Socket6::inet_ntop(Socket6::AF_INET6(), 
     1327                                                     $iaddr); 
     1328    } 
    13021329} 
    13031330 
     
    13101337sub peer_addr_string { 
    13111338    my Danga::Socket $self = shift; 
    1312     my $ip = $self->peer_ip_string; 
    1313     return $ip ? "$ip:$self->{peer_port}" : undef; 
     1339    my $ip = $self->peer_ip_string 
     1340        or return undef; 
     1341    return $self->{peer_v6} ? 
     1342        "[$ip]:$self->{peer_port}" : 
     1343        "$ip:$self->{peer_port}"; 
    13141344} 
    13151345