Die Socket-API ist der De-facto-Standard für TCP / IP- und UDP / IP-Kommunikation (dh Netzwerkcode, wie wir ihn kennen). Eine seiner Kernfunktionen accept()
ist jedoch etwas magisch.
So leihen Sie sich eine semi-formale Definition aus:
accept () wird auf der Serverseite verwendet. Es akzeptiert einen empfangenen eingehenden Versuch, eine neue TCP-Verbindung vom Remote-Client zu erstellen, und erstellt einen neuen Socket, der dem Socket-Adresspaar dieser Verbindung zugeordnet ist.
Mit anderen Worten, accept
gibt einen neuen Socket zurück, über den der Server mit dem neu verbundenen Client kommunizieren kann. Der alte Socket (an dem er accept
aufgerufen wurde) bleibt am selben Port geöffnet und wartet auf neue Verbindungen.
Wie funktioniert das accept
? Wie ist es implementiert? Es gibt viel Verwirrung zu diesem Thema. Viele Leute behaupten, dass Akzeptieren einen neuen Port öffnet und Sie über diesen mit dem Client kommunizieren. Dies ist jedoch offensichtlich nicht der Fall, da kein neuer Port geöffnet wird. Sie können tatsächlich über denselben Port mit verschiedenen Clients kommunizieren, aber wie? Wenn mehrere Threads recv
denselben Port aufrufen , woher wissen die Daten, wohin sie gehen sollen?
Ich denke, es ist etwas in der Art, wie die Adresse des Kunden mit einem Socket-Deskriptor verknüpft ist, und wann immer Daten eingehen, werden recv
sie an den richtigen Socket weitergeleitet, aber ich bin mir nicht sicher.
Es wäre großartig, eine gründliche Erklärung des Innenlebens dieses Mechanismus zu erhalten.