2017-12-01 4 views
0

Ich versuche Socket-Programmierung zu lernen. Also meine Frage ist, dass, wenn Sie ein Kind auf dem Client nach dem Herstellen einer Verbindung mit einem Socket, d. H. Nach dem Verbindungsaufruf. Dann können Sie unabhängig lesen und schreiben mit Socket-Deskriptor im Kind und Eltern? Der Server kennt nur einen Socket. Also wenn du beim Kind schnell liest als beim Elternteil. Wird es beim Eltern Datenverlust geben?Fork in Client in einem Client-Server-Programm

+0

Ja. Wenn zwei Prozesse versuchen, auf derselben Verbindung zu agieren, werden sie konkurrieren. – PSkocik

+0

@PSkocik erstellt ein Kind nicht den Socket selbst replizieren? –

Antwort

0

Ja. Wenn zwei Prozesse versuchen, auf derselben Verbindung zu agieren, werden sie konkurrieren.

Forking dupliziert den Dateideskriptor der Verbindung (wie bei dup/dup2/dup3), aber diese beiden filedescriptors werden nur zwei gezählt Verweise auf die gleiche Verbindung sein.

Praktisch bedeutet, dass die meisten fd-Einnahme syscalls (read(), write(), ...) wird bis zur gemeinsamen Zieldatei erhalten (die eigentliche Verbindung) jedoch close() Anrufe werden nur die Verweiszähler dekrementieren und initiiert nur eine Verbindung Herunterfahren (wie mit dem shutdown() Syscall), wenn der Refcount 0 wird.