NAME
DBIx::DSN::Resolver - Resolve hostname within dsn string
SYNOPSIS
use DBIx::DSN::Resolver;
my $dsn = 'dbi:mysql:database=mytbl;host=myserver.example'
my $resolver = DBIx::DSN::Resolver->new();
$dsn = $resolver->resolv($dsn);
is $dsn, 'dbi:mysql:database=mytbl;host=10.0.9.41';
DESCRIPTION
DBIx::DSN::Resolver parses dsn string and resolves hostname within dsn. This module allows customize the resolver function.
CUSTOMIZE RESOLVER
use the resolver argument. This sample code makes resolver cache with Cache::Memory::Simple.
use Cache::Memory::Simple;
use Socket;
my $DNS_CACHE = Cache::Memory::Simple->new(
size => 256,
);
my $r = DBIx::DSN::Resolver->new(
resolver => sub {
my $host = shift;
my $ipr = $DNS_CACHE->get($host);
my $ip = $ipr ? $$ipr : undef;
if ( !$ipr ) {
$ip = Socket::inet_aton($host);
$DNS_CACHE->set($host,\$ip,5);
}
return unless $ip;
Socket::inet_ntoa($ip);
}
);
$dsn = $resolver->resolv($dsn);
Default:
resolver => sub { Socket::inet_ntoa(Socket::inet_aton(@_)) }
AUTHOR
Masahiro Nagano <kazeburo {at} gmail.com>
NOTES
DBIx::DSN::Resolver uses Socket::inet_aton for hostname resolution. If you use Solaris and fail hostname resolution, please recompile Socket with "LIBS=-lresolve"
LICENSE
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.