|
|||||
|
|
#1 |
|
|
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 | |
|
|