Thread IO::Socket Problem: Socket braucht zu lange
(7 answers)
Opened by coax at 2005-05-25 18:48
Erst einmal use warnings; und use strict;, damit wirst du eine Menge Probleme loesen und weiteren Problemen vorbeugen.
Das tut so nicht funktionieren, weil du spaeter erst der Arrayvariable mit dem Index -1 ($OPorts[-1]) etwas zuweist und erst danach $a inkrementierst - das ist illegal ;). Code: (dl
)
@OPorts[$a] = $i; $a++; @OPorts[$a] ist ein Array-Slice, du willst sicher $OPorts[$a] (mit use warnings haettest du auch eine entsprechende Warnung bekommen Scalar value @OPorts[$a] better written as $OPorts[$a]). Statt globaler Variablen ($startport, $stopport, $host) kannst du mit Parameteruebergabe arbeiten Code: (dl
)
&scanstart($host, $startport, $stopport); Auch die Pruefung Code: (dl
)
1 if (&socket($host, $i) eq "True") { kannst du dir etwas vereinfach; Der IO::Socket-Konstruktur liefer naemlich undef zurueck falls ein Fehler aufgetreten ist (Fehlermeldung steckt in $@), Code: (dl
)
1 sub socket { Code: (dl
)
return $socket ? "True" : "False"; Code: (dl
)
1 if ( &socket($host, $i) ) { Das hier fuehrt zwar zu den erwuenschte Ergebnis Code: (dl
)
) || { $bool = "False" }; ist aber ein ueberfluessiges Konstrukt, die geschweiften Klammern stellen naemlich ein anonymer Hash dar und kein Anweisungsblock ($bool = "False" wird trotzdem ausgewertet). So waer's richtig... Code: (dl
)
1 ) || ( $bool = "False" ) edit: Code: (dl
)
foreach $pp (@OPorts) { print "$pp, " } Code: (dl
)
print join ',' => @OPorts Die Variable $a kannst du dir sparen, wobei der Bezeichner auch noch schlecht gewaehlt ist Code: (dl
)
1 foreach my $port ( $startport .. $stopport ) { Grusz Christian.\n\n <!--EDIT|coax|1117037897--> ,,Das perlt aber heute wieder...'' -- Dittsche
|