I am using Active Perl 5.8.8 on Windows.
I am writing an app that opens a TCP socket to a network printer, and
then prints barcode labels on it. When the app starts up, it tries to
determine if the specific printer is reachable or not.
If the printer is on the network and online, then the test goes well.
However, if the printer is not reachable for some reason, there is a
lengthy timeout before the connect function fails.
I would like to make that timeout much shorter than it is, so I wonder
if anybody knows how to do that. My sample program is shown below:
use Socket;
use Warnings;
$printPort = 9100;
$printHost = '10.18.0.30';
$printProtocol = (getprotobyname('tcp'))[2];
# The print host can be expressed as either a host name, or an
# IP address, but it has to end up as a binary IP address.
if ($printHost =~ /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/)
{
$printHost = pack('C4', split(/\./, $printHost));
}
else {$printHost = (gethostbyname($printHost))[4];}
$printHostReadable = join('.', unpack('C4', $printHost));
print "\n\nConnecting to printer $printHostReadable... ";
if (socket(BARCODE, AF_INET, SOCK_STREAM, $printProtocol))
{
if (connect(BARCODE, pack('Sna4x8', AF_INET, $printPort,
$printHost)))
{
print "<< ok >>\n\n";
close BARCODE;
}
else
{
print "<< offline >>\n\n";
}
}
Barry Brevik
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs