perlquestion
ig
<p>Is there an existing module to query MS SQL Server Browser (ms-sql-m)?</p>
<p>Edit: The protocol ([https://msdn.microsoft.com/en-us/library/cc219703.aspx]) is simple. As I didn't find a module that provided easy access to it, I wrote my own query.</p>
<c>
if($self->{db_server} =~ m/(.*)\\(.*)/) {
my $server = $1;
my $instance = $2;
# This is an instance name
# Resolve instance name to a port number
my $socket = new IO::Socket::INET(
PeerAddr => "$server:1434",
Proto => 'udp',
);
$socket->send("\x04$instance\x00");
eval {
local $SIG{ALRM} = sub { die "Timed out waiting for recv"; };
alarm 20; # wait up to 20 seconds for a response
eval {
my $ret = $socket->recv(my $data, 255);
unless(defined($ret)) {
die "recv error: $!";
}
my ($srv_resp, $resp_data) = unpack("C n/a", $data);
my $details = { split(/;/, $resp_data) };
$self->{db_host} = $details->{ServerName};
$self->{db_port} = $details->{tcp};
};
alarm 0;
die $@ if($@);
};
alarm 0;
if($@) {
die "ERROR: Query SQL Server Browser failed with: $@";
}
}
</c>