Changeset 833
- Timestamp:
- 10/21/09 21:51:10 (5 weeks ago)
- Location:
- trunk/api/perl
- Files:
-
- 2 modified
-
ChangeLog (modified) (1 diff)
-
lib/Cache/Memcached.pm (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/api/perl/ChangeLog
r829 r833 1 2009-10-21: version 1.28 2 3 * IPv6 support (https://rt.cpan.org/Ticket/Display.html?id=50577) 1 4 2 5 * Add Encode.pm requirement to Makefile.PL for perl 5.6.x (Ask). -
trunk/api/perl/lib/Cache/Memcached.pm
r827 r833 36 36 use constant COMPRESS_SAVINGS => 0.20; # percent 37 37 38 use vars qw($VERSION $HAVE_ZLIB $FLAG_NOSIGNAL );39 $VERSION = "1.2 7";38 use vars qw($VERSION $HAVE_ZLIB $FLAG_NOSIGNAL $HAVE_SOCKET6); 39 $VERSION = "1.28"; 40 40 41 41 BEGIN { 42 42 $HAVE_ZLIB = eval "use Compress::Zlib (); 1;"; 43 $HAVE_SOCKET6 = eval "use Socket6 qw(AF_INET6 PF_INET6); 1;"; 43 44 } 44 45 … … 232 233 233 234 my $now = time(); 234 my ($ip, $port) = $host =~ /(.*):(\d+)/; 235 my ($ip, $port) = $host =~ /(.*):(\d+)$/; 236 $ip =~ s/[\[\]]//g; # get rid of optional IPv6 brackets 237 235 238 return undef if 236 239 $host_dead{$host} && $host_dead{$host} > $now; … … 245 248 # if a preferred IP is known, try that first. 246 249 if ($self && $self->{pref_ip}{$ip}) { 247 socket($sock, PF_INET, SOCK_STREAM, $proto);248 $sock_map{$sock} = $host;249 250 my $prefip = $self->{pref_ip}{$ip}; 250 $sin = Socket::sockaddr_in($port,Socket::inet_aton($prefip)); 251 if ($HAVE_SOCKET6 && index($prefip, ':') != -1) { 252 no strict 'subs'; # for PF_INET6 and AF_INET6, weirdly imported 253 socket($sock, PF_INET6, SOCK_STREAM, $proto); 254 $sock_map{$sock} = $host; 255 $sin = Socket6::pack_sockaddr_in6($port, 256 Socket6::inet_pton(AF_INET6, $prefip)); 257 } else { 258 socket($sock, PF_INET, SOCK_STREAM, $proto); 259 $sock_map{$sock} = $host; 260 $sin = Socket::sockaddr_in($port, Socket::inet_aton($prefip)); 261 } 262 251 263 if (_connect_sock($sock,$sin,$self->{connect_timeout})) { 252 264 $connected = 1; … … 261 273 # normal path, or fallback path if preferred IP failed 262 274 unless ($connected) { 263 socket($sock, PF_INET, SOCK_STREAM, $proto); 264 $sock_map{$sock} = $host; 265 $sin = Socket::sockaddr_in($port,Socket::inet_aton($ip)); 275 if ($HAVE_SOCKET6 && index($ip, ':') != -1) { 276 no strict 'subs'; # for PF_INET6 and AF_INET6, weirdly imported 277 socket($sock, PF_INET6, SOCK_STREAM, $proto); 278 $sock_map{$sock} = $host; 279 $sin = Socket6::pack_sockaddr_in6($port, 280 Socket6::inet_pton(AF_INET6, $ip)); 281 } else { 282 socket($sock, PF_INET, SOCK_STREAM, $proto); 283 $sock_map{$sock} = $host; 284 $sin = Socket::sockaddr_in($port, Socket::inet_aton($ip)); 285 } 286 266 287 my $timeout = $self ? $self->{connect_timeout} : 0.25; 267 unless (_connect_sock($sock, $sin,$timeout)) {288 unless (_connect_sock($sock, $sin, $timeout)) { 268 289 my $cb = $self ? $self->{cb_connect_fail} : undef; 269 290 $cb->($ip) if $cb;
