Hallo ZusammenIch habe mir einen kleinen TCP Server und einen Client dazu geschrieben:
Client
sub connect
{
use IO::Socket::SSL;
$IO::Socket::SSL::DEBUG = 1;
$host = $_[1];
$port = $_[2];
$cmd = $_[3];
$connection = IO::Socket::SSL->new(PeerAddr =>$host,
PeerPort =>$port,
ReusePort => 1); if (defined $connection)
{
print $connection $cmd;
$connection->shutdown(1);
@answ = <$connection>;
} else
{
print "some troubles with connection: $!\n" ;
}
foreach $line (@answ)
{
print $line;
}
}
Server
$server = IO::Socket::SSL->new(LocalPort => $listen_port,
Proto => 'tcp',
Listen => 5,
SSL_cipher_list => '3DES') or die "Konnte kein TCP-Server an port 10001 werden: $!\n";while ($client = $server->accept())
{
$client_ip = $client->peerhost();
# $rem_name = gethostbyaddr($client_ip, 0);
&logmsg (1, "Connection from $client_ip");
$cmd=<$client>;
# chop $cmd;
&logmsg (1, "Receive complete, Executing($cmd)");
open (CMD, "$cmd|") or &logmsg(2, "*** open of Command faild ($cmd)");
@output = <CMD>;
print $client @output;
&logmsg (1, "Execution complete! Closing connection");
$client->shutdown(2);
&logmsg (1, "_______________________________________________________");
}
was mich ärgert...
Das ganze funktioniert nicht immer. Wenns nicht geht erhalte ich folgenden Error:
IO::Socket::INET configuration failed
at gamecom.pm line 12
eine sekunde später, gehts dann aber schonwieder. Ich hab dann einfach mal, frech wie ich bin, die hypotese aufgestellt, dass das socket noch belegt ist. Mit netstat hab ich dann herausgefunden, dass das jedesmal ein neues socket eröffnet wird. Was ich aber nicht will, da das ganze mal in einem webclient integriert wird. Dann hätte ich ja auf einaml tausende von den dingern....
also ganz einfach gefragt, wie verhindere ich, dass es jedesmal eine neu solche zeile in netstat gibt ?
tcp 0 0 127.0.0.1:44675 127.0.0.1:20001 TIME_WAIT - timewait (59,02/0/0)
Datum: 19.09.2005-20:28
