Auf dem Concurrent-Server, Server viele Kinder laicht (davon ausgehen, dass ich mehrere Verfahren, wenn Clients connet verwende). Wenn der Client also Sockets schließt (close()
), sendet er FIN
an den Server und empfängt ACK
vom Server.wenn das Kind Server Socket schließen
Schließlich gibt Server read()
Funktion 0
und exit()
Funktion aufgerufen wird. Es bewirkt, dass der untergeordnete Server den Socket beendet und schließt, und sendet FIN
an seinen Client.
In dieser Situation, wie kann Server empfangen ACK
obwohl Buchse Kinder Server geschlossen ist? und wie kann Server FIN
erneut senden, wenn Client die FIN
nicht empfängt, obwohl es keinen verbundenen Socket wegen des Kindes gibt, das beendet wird?
Protokolliert Kernel, der bis Endbearbeitungsstation vier Handshaking Prozess des Sockets beendet, obwohl es geschlossen ist?
Es bedeutet, dass 'close()' erst Endbearbeitungsstation Handshaking, wie Dateideskriptor im Kernel ist nicht vollständig geschlossen, zurückkehrt, wenn eine Prozeßdatei geöffnet wird, obwohl der Referenzzähler gleich Null ist? –
Nein, das bedeutet nichts davon. 'Asynchron' bedeutet, dass * * * zurückkommt, bevor die Verarbeitung beendet ist, und die FD ist geschlossen, aber die Verbindung bleibt bestehen ... – EJP