Net-Wire10
view release on metacpan or search on metacpan
lib/Net/Wire10.pm view on Meta::CPAN
$self->{cancelling} = 1;
return undef;
}
# Get the connection id
sub get_connection_id {
my $self = shift;
return $self->{server_thread_id};
}
# Get the server version string
sub get_server_version {
my $self = shift;
return $self->{server_version};
}
# Is the driver currently connected?
# If a fatal error has occurred, this will return false
sub is_connected {
my $self = shift;
return defined($self->{socket});
}
# Return the current error object, if any
sub get_error_info {
my $self = shift;
return $self->{error};
}
# Reset the time remaining counter before executing a command
sub _reset_timeout {
my $self = shift;
my $seconds = shift;
if ($seconds == 0) {
$self->{command_expire_time} = 0;
return undef;
}
$self->{command_expire_time} = time + $seconds;
return undef;
}
# Return the number of seconds left before the current
# operation should time out
sub _check_time_remaining {
my $self = shift;
return 0 if $self->{command_expire_time} == 0;
my $remaining = $self->{command_expire_time} - time;
$self->_fatal_error("Timeout while receiving data") if $remaining < 1;
return $remaining;
}
# Fail if not connected anymore, due for example to a fatal error
sub _check_connected {
my $self = shift;
$self->_fatal_error("Not connected") unless defined($self->{socket});
}
# Fail if currently connected to a streaming data reader
sub _check_streaming {
my $self = shift;
$self->_vanilla_error("Connection is busy streaming") if $self->{streaming};
}
# Connects to the database server
sub _connect {
my $self = shift;
$self->_vanilla_error("Already connected") if defined($self->{socket});
$self->_fatal_error("No host given") if length($self->{host}) == 0;
$self->_fatal_error("No port given") if length($self->{port}) == 0;
# Connect timeout.
$self->_reset_timeout($self->{connect_timeout});
my $socket;
printf "Connecting to: %s:%d/tcp\n", $self->{host}, $self->{port} if $self->{debug} & 1;
$socket = IO::Socket::INET->new(
Proto => 'tcp',
PeerAddr => $self->{host},
PeerPort => $self->{port},
Timeout => $self->_check_time_remaining
) or $self->_fatal_error("Couldn't connect to $self->{host}:$self->{port}/tcp: $@");
$socket->autoflush(1);
$socket->timeout(TIMEOUT_GRANULARITY);
$self->{socket} = $socket;
$self->{io_select} = new IO::Select($self->{socket});
$self->_reset_command_state;
}
# When a fatal error occurs, tear down TCP
# connection and set command state to indicate error.
sub _fatal_error {
my $self = shift;
my $msg = shift || '';
$self->disconnect;
$self->{error} = Net::Wire10::Error->new(-1, '', $msg) unless defined ($self->{error});
$self->{error}->{message} = $msg if length($msg) > 0;
die $self->{error}->{message};
}
# When a non-fatal error occurs, just throw it.
sub _vanilla_error {
my $self = shift;
my $msg = shift || '';
$self->{error} = Net::Wire10::Error->new(-1, '', $msg) unless defined ($self->{error});
$self->{error}->{message} = $msg if length($msg) > 0;
die $self->{error}->{message};
}
# Receives data from the network and reassembles fragmented packets
sub _receive_packet_data {
my $self = shift;
my $socket = $self->{socket};
my $io_select = $self->{io_select};
my $data;
( run in 1.661 second using v1.01-cache-2.11-cpan-39bf76dae61 )