[Perl] Socket-Connection

Hallo,

folgende Sache: Ich habe ein Script bei meinem Provider laufen, dass ziemlich tricky zu einem Java-Applet eine Socket-Connection aufbaut. Aber offenbar isses zu tricky, denn mein Provider mag es überhauptnicht (Das Script soll angeblich *alle* freien IP-Adressen dauerhaft belegen), und deshalb möchte ich Euch bitten, einmal einen Blick draufzuwerfen, ob es nicht eine Provider-schonende Variante davon gibt:

sub CreateSocketConnection
{ 
 #--- PARAMETER ---

 $ThePort = $\_[0];

 print ("..."); 

 my $port = shift || $ThePort;
 my $proto = getprotobyname ('tcp');


 if (socket (Server, PF\_INET, SOCK\_STREAM, $proto))
 { 
 if (bind (Server, sockaddr\_in ($port, INADDR\_ANY))) 
 {
 if (listen (Server, 1)) 
 {
 $SIG{CHLD} = \&REAPER; 

 my $paddr; 
 $paddr = accept (Client, Server); 

 my ($is\_port, $is\_iaddr) = sockaddr\_in ($paddr);
 my $name = gethostbyaddr ($is\_iaddr, AF\_INET);

 select (Client); $|=1; #--- Autoflush on ! --- UMLEITUNG aller Ausgaben auf Client !!!! --- 

 my $EndFlag = 0;
 my $Line = "";

 while (($EndFlag == 0) && ($Ok == $True))
 {
 $Line = readline \*Client;
 $Line =~ s/[\t\n\r\f]//g; #--- Umbrüche entfernen --- 

 if (length ($Line) \> 0) 
 { 
 if ($Line =~ /shutdown\_shutdown\_shutdown/i) 
 {
 $EndFlag = 1; 
 } 
 else
 {
 HandleIncomingCGIParamStr ($Line);
 } 
 } 
 }

 print Client "\n\nConnection shuting down ...\n"; 
 print Client "\f"; #--- Datenende-Kennung anhängen ---

 close Client;
 }
 } 
 }

 select (STDOUT);

 if ($!)
 {
 print "\n\nConnection ERROR: " . $! . "\n";
 } 
 else
 {
 print "\n\nConnection closed\n";
 } 

 print ("..."); 
}

na, wie kann man das verbessern ?

Grüße Ralf

Nachdem dir hier scheinbar niemand ne Antwort geben kann/will schreib ich doch mal was dazu. Mein Perl-Kenntnisse sind zwar nur rudimentär und das mit der Socket-Programmierung ist auch schon ein paar Jahre her, aber vielleicht bringen dich meine Gedanken doch auf die richtige Spur.

Mir fällt da die Zeile

if (bind (Server, sockaddr_in ($port, INADDR_ANY)))

ins Auge. Deine Site ist beim DNS registriert und ist einer IP-Adresse zuegewiesen. Für dein Skript reicht es also aus, wenn du die Socket an diese eine IP-Adresse bindest. Ich vermute nun, dass du statt INADDR_ANY eben diese IP-Adresse angeben musst.

Gruß
Benky

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Benky,

Mir fällt da die Zeile

if (bind (Server, sockaddr_in ($port, INADDR_ANY)))

ins Auge. Deine Site ist beim DNS registriert und ist einer
IP-Adresse zuegewiesen. Für dein Skript reicht es also aus,
wenn du die Socket an diese eine IP-Adresse bindest. Ich
vermute nun, dass du statt INADDR_ANY eben diese IP-Adresse
angeben musst.

das ist ne gute Idee ! Ich teste das mal mit der IP aus $ENV{SERVER_ADDR}. Das ist dieselbe, die mir auch ein Ping auf meine Domain zurückgibt. Müsste klappen :smile:

danke und viele Grüße Ralf