PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Socket-Programmierung



ikarus
29-01-2005, 11:36
Hallo,

ich habe eine Frage zur Socket-Programmierung.
Ich habe eine Cient-Server-Anwendung unter Linux geschrieben (Server in C, Client in PHP), alles funktioniert bestens.
Jetzt meine Frage, warum hält Linux die Verbindung noch offen ???
Wenn ich mir mit "netstat" die Netzwerk-Schnittstele ansehe, ist dort immer noch die Verbindung im Status 'TIME_WAIT' und dies für alle Verbindungen die ich angenommen habe. Nach ca. 2 Minuten verschwinden diese zwar doch kann ich einen Server nicht sofort neu starten, weil 'bind' den Port nicht binden kann.
Kann ich diese Verhalten irgendwie beeinflussen ???

Beatkiller
29-01-2005, 12:00
Das hat alles seine Richtigkeit, wie Du dem RFC 793 entnehmen kannst:

http://www.faqs.org/rfcs/rfc793.html

RapidMax
29-01-2005, 12:18
Ich gehe davon aus, dass du vom Server redest (der Client wählt ja jeweils einen zufälligen Port). Dort muss du den Port nur einmal Binden. Wenn eine Verbindung eintrifft, erzeugst du einen neuen Prozess oder Thread und übergibst dem die Verbindung. Damit kann der Hauptprozess/Thread wieder auf neue Verbindungen warten. Hier ein Beispiel (http://www.erlenstar.demon.co.uk/unix/faq_8.html#SEC88)

Gruss, Andy

ikarus
29-01-2005, 13:59
Ich binde den Server nur einmal an den port, das ist richtig. Nur warum kann ich den Server nicht stoppen und dann gleich wieder starten ????

CodeReaver
30-01-2005, 11:27
meinst du vielleicht das hier?
http://www.ecst.csuchico.edu/~beej/guide/net/html/syscalls.html#bind
Das letzte Beispiel, bzw. der Text darüber, da steht wie du bind() sagst das du den port danach sofort wieder benutzen können willst :)

gEry
30-01-2005, 13:34
HI ikarus!

Ich habe unter Windows mittels MFC auch eine Socketanwendung programmiert... du hast das aber mit Linux und PHP gemacht... unter Linux als Konsole Projekt habe ichdas auchs chon gemacht, jedoch nicht mit PHP kannst du mir mal zeigen, was du da gemacht hast? Hört sich echt spannend an!

Beatkiller
30-01-2005, 16:30
PHP bringt die gleichen Funktionen mit, die man braucht, um Netzwerk-Programme zu schreiben. Das Prinzip ist das gleiche wie mit C/Pascal und anderen Sprachen. Hier eine nette Quelle:

http://pear.php.net/package/Net_Server

gEry
30-01-2005, 16:54
vielen dank!

ikarus
30-01-2005, 19:00
Hallo,

vielen Dank für den Tip werde ich mal ausprobieren.
Ich nutze fsockopen unter PHP um eine Verbindung herzustellen, danach werden mit fputs Daten geschickt.