> Programming Languages > Perl
Various Topics Home | Disclaimer | Report Adult Posts

Various Topics on Perl



Perl - "Opening a listen socket on Windows 2000" in Programming Languages


Old 11-18-2004   #1
.. ..ns..
 
Default Opening a listen socket on Windows 2000

Hi everyone,

I've got a very weird problem. I'm writing a perl script that runs as
a service on windows 2000/xp/2003. It starts a seperate listening
thread to listen for connections and do the processing that's needed.
The multithreading part and running as a service part all work fine on
all platforms.
However, the opening of a listen socket only works on Windows XP. I
can't figure out why though, is the $! also remains empty. On Windows
2000 (server) and Windows 2003 (server) it just says that the
$listenSocket is undefined, $! remains empty. Can anyone see what's
happening in the code below?
I've tries a multitude of options in the IO::Socket::INET->new()
method, but nothing worked sofar. The options that are in there now
are only part of the last attempt

(It's the code that comprises the listener thread):

---
sub listenerThread() {
my $listenSocket;
my $processSocket;
my $dataRcvd;
my $peerIPAddr;
my $peerHostname;
my $peerDomainname;
my @hosts;

print DEBUG "This is the listener waking up!\n";

$listenSocket = IO::Socket::INET -> new( Listen => 5,
MultiHomed => 1,
LocalPort => 6666,
LocalHost => "172.24.2.6",
Proto => "tcp",
Reuse => 1,
Blocking => 0
);
print DEBUG "Listening socket could not be created. Reason: $!\n" if
( ! $listenSocket );

while ( $listenerControl eq "run" ) {
if ( $processSocket = $listenSocket->accept() ) {
print DEBUG "Processing socket could not be created. Reason:
$!\n" if ( ! $processSocket );
print DEBUG "Received data\n";

open( TEST, ">>c:\\temp\\test.svc" );
print TEST "Socket opened.\n";

$peerIPAddr = $processSocket->peerhost();
print TEST "$peerIPAddr\n";

while ( defined( $dataRcvd = <$processSocket> ) ) {
#->get_line();
chomp( $dataRcvd );
print TEST "$dataRcvd\n";

if ( $dataRcvd =~ /Hostname.+)/ ) {
$peerHostname = $1;
print TEST "Matched hostname: $peerHostname\n";
}

if ( $dataRcvd =~ /Domainname.+)/ ) {
$peerDomainname = $1;
print TEST "Matched domainname: $peerDomainname\n";
}
}

close( $processSocket );
print TEST "Socket closed\n";

#open( TEST, ">>c:\\temp\\test.svc" );
print TEST "$peerIPAddr\t$peerHostname.$peerDomainname\t$peer Hostname\n";
close( TEST );

if ( defined( $peerHostname ) && defined( $peerDomainname ) ) {
updateHostsFile( $peerIPAddr, $peerHostname, $peerDomainname
);
}

undef( $peerIPAddr );
undef( $peerHostname );
undef( $peerDomainname );
}
}

print DEBUG "This is the listener dying!\n";
}
---

Thanks in advance!
Tim.
 

Thread Tools
Display Modes





Powered by vBulletin®
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0