Perl - Sockets

Hey,

ich habe ein Problem mit meinen Perl-Sockets.
Und zwar will ich eine Verbindung umleiten, quasi ein
PITM (Program in the middle).
Nun hab ich das Problem, dass die Sockets nicht ganz so wollen wie ich.
Die beiden Verbindungen werden per Threads abgearbeitet.
(d.h. einen Server-Client Thread, und einen Client-Server Thread)

Dies geschieht in diesem Abschnitt:
Code:
   printf "main() : Starting Server - Client - Thread\n";
    @temp = ($rsock, $client, 1);
    threads -> new ( 'transfer', @temp );
     
    printf "main() : Starting Client - Server - Thread\n";
    @temp = ($client, $rsock, 2);
    threads -> new ( 'transfer', @temp );
  
    print "main() : ready to accept new client !\n";
Nun hängt das Programm jedoch (komischerweise) bei der Erstellung des zweiten Threads.
"main() : Starting Client - Server - Thread" kommt noch, dann hängts jedoch, bis der Server etwas gesendet hat. Und dann läuft das Programm vorerst weiter.
Wenn jetzt der Client was sendet, kommt das erst an, wenn der Server noch ein paar weitere Nachrichten verschickt.
Ich hoffe ihr wisst, was ich meine (ich will in erster hinsicht ein HTTP-Weiterleitungs-Script schreiben. Prob ist da u.A. dass der Client zuerst was sendet)

Hier der Code:
http://paste.newroots.de/index.php/view/c5d40395


MfG
 
Du musst einen der beiden Sockets mittels fork() in einen Kindprozess auslagern würde ich mal tippen. ;)
 
Hey,

Danke für die schnelle Antwort,

ich habs jetzt per
Code:
    if ( ( $pid = fork() ) == 0  ) {
      printf "main() : Starting Server - Client - Thread\n";
      @temp = ($rsock, $client, 1);
      #threads -> new ( 'transfer', @temp );
      transfer ( @temp );
    }
    if ( ( $pid = fork() ) == 0  ) {    
      printf "main() : Starting Client - Server - Thread\n";
      @temp = ($client, $rsock, 2);
      #threads -> new ( 'transfer', @temp );
      transfer ( @temp );
    }
Versucht, jedoch gleiches Problem.
Wenn ich per telnet/browser connecte, kommt das:

TCP - PITM
Starting loop
Accept client
[Connect from 127.0.0.1]
main() : Starting Server - Client - Thread
Transfer() [1]: 127.0.0.1 - 127.0.0.1 started
main() : ready to accept new client !
main() : Starting Client - Server - Thread
Transfer() [2]: 127.0.0.1 - 127.0.0.1 started
->GET / HTTP/1.1

und dann hängts wieder.. /:
>>print $to $tmp;<<
In der Zeile hängts. D.h. in der Zeile, wo die Daten weitergeleitet werden sollen. (D.h. vom Client -> [Program] ==HIER=> Server )
 
Ja quasi schon.

Ich will jetzt als erstes Ziel ein Programm machen, was vom Internet erreichbar ist:

[PC]====[INTERNET] -->[Router]--->[Programm]

Dieses Programm ersetzt dann gewisse Sachen im HTTP-Request und leitet es an einen internen Server weiter (also einer der im Netzwerk hinter dem Router steht). Direkten zugriff auf den Server soll jedoch nicht möglich sein.
 
Zurück
Oben