Gebt ihr da als zweiten Parameter 'nen Pfad an?! Das klappt natürlich nicht. Außerdem können timed und port_forward ja nicht auf dem selben Port horchen. Also timed irgendwo starten, dann den Hostname von der Kiste angeben, nicht den Pfad.
Bsp:
/bla/blubb/timed 1337
/bla/bla/port_forward 4711 – localhost 1337 (in 'ner zweiten shell)
nc localhost 4711 (in 'ner dritten shell)
[gelöst]
Hm.
Ich mache zum Test in meiner thread-Funktion erst mal ein write(arg->fd2, “Hallo\n”, …);
Komischerweise kommt das Hallo zweimal auf der gleichen Seite raus.
Die Threadfunktion habe ich aber garantiert mit umgekehrten Deskriptoren aufgerufen. Weiß jemand, woran das liegen kann?
Nachtrag:
Mann bin ich blöde! Ich habe natürlich nur eine Struktur verwendet. Durch den Tausch, habe ich somit natürlich auch die Werte im ersten Thread noch geändertn …
Ich starte
./port-forward 1111 – localhost 22
auf der faui05
nun mach ich von zu Hause ne Verbindung auf.
Auf der faui05 sind nun zwei “Prozesse” mit port-forward zu sehen.
Wenn ich den Hauptprozess abschieße, läuft die Verbindung normal weiter.
Ist das richtig so?
Ich hätte im Moment gar keine Ahnung, wie man das Verhindern soll.
Muss ich in port-forward.c oder forward.c sonst noch irgendwelche Signalbehandlungen machen? (Außer SIGPIPE ignorieren)
Jetzt ist es ja so, dass das Hauptprogramm keine Meldung ausgibt, wenn ich ein Verbindungsthread zum Beispiel mit kill abschieße.
new_client kehrt dann ja nicht zurueck.
seh ich das richtig so, dass wir die a) gar nicht machen muessen, sondern diese vollkommen optional ist. und falls wir sie nicht machen, dass wir einfach die connbroker.o verwenden, anstelle das selber anzupassen???
Folgendes Problem: Wenn ich mein Programm mit timed teste und dann beende closed zwar timed aber nicht meine port-forward. Da meine port-forward.c mit der forward.o perfekt funktioniert liegt der Fehler in der forward.c . Da erstell ich zwei threads mit der aufgabe task auf die gewartet wird bis sie beendet sind. Nur irgendwie haut meine task nicht hin deshalb hier mal mein code:
bau dir noch ne schleife um das write, dass die erfolgreiche anzahl von geschriebenen bytes von denen des reads jeweils abzieht. ausserdem fehlt noch fehlerabfrage bei write und ueberpruefen von errno == EPIPE
Danke, ich hab das nun geändert. Hilft aber leider trotzdem nicht. Es heisst immer noch:
“connect: Invalid Argument”
Nun hab ich vor das memcpy ein memset((char *) &serv_addr.sin_addr , 0, host_name->h_length + 1);
gesetzt, im naiven glauben es kann ja sein dass serv_addr.sin_addr nicht nullterminiert ist…
dann bekommt man:
“connect: Connection refused”
./port_forward 1234 -- wwwproxy.informatik.uni-erlangen.de 8080
Dann habe ich localhost:1234 im Browser als Proxy eingestellt und versucht im Browser “test.de” aufzurufen - der Port-Forwarder beendet die Verbindung mit der genannten Fehlermeldung.
mmh soweit so gut, funzt glaub ich so wies soll, mein problem is jetzt nur noch dass ich irgendwie ne art lag drin hab, er gibt jetzt nur noch jede 2. sekunde aus (mit timed und nc localhost) is das egal?!
ich hab die vermutung es liegt irgendwie an der puffergröße,hab die willkürlich mal auf 50 gesetzt aber ka … oder muss ich den puffer evtl mitnem mutex umklammern?!