Ich teste Zeug mit Steckdosen und bin auf diesen seltsamen Fall gestoßen:
Ich codierte ich sehr einfache TCP-Server in c, ich habe es nach Accept () blockiert, nur um zu sehen, was passiert, wenn mehrere Verbindungsversuche gleichzeitig akzeptiert werden:
Wie kommt es, dass ein Prozess oder eine Verbindung einen Inode von 0 haben kann? Kann mir jemand erklären, was los ist?
Was ist der Rückstand für die Annahme? Ich vermute, es ist 2.
Eugen Rieck vor 6 Jahren
0
Wenn ich es richtig verstehe und das Backlog die Größe der Warteschlange der anstehenden eingehenden Verbindungen ist, dann ist es, wie der Code angibt, 5. Übrigens habe ich auch festgestellt, dass der Server eine Verbindung mit 2 mehr Clients herstellen kann, als in der angegeben ist Rückstand, ich werde wahrscheinlich eine andere Frage dazu posten
joseph M'Bimbi-Bene vor 6 Jahren
0
1 Antwort auf die Frage
0
Eugen Rieck
Linux verwendet für das Listen-Backlog einen Ansatz mit zwei Warteschlangen. Dies bedeutet, dass zusätzlich zu den vollständigen Verbindungen (5 wie in Ihrem Code) eine Warteschlange mit unvollständigen Verbindungen vorhanden sein kann, bei der der 3way-Handshake noch nicht abgeschlossen ist.
Verbindungen in diesem Status sind noch keinem Prozess zugeordnet, sie gehören also zum Kernel und führen nur zu einer Prozess-ID 0. Dieses Bit hat mich in einer Mono / .NET-Anwendung gebissen, bei der ich in Mono nach einem Fehler suchte tatsächlich Verhalten durch Design des Kernels.