was passiert, wenn der Empfänger die Datengeschwindigkeit über den Socket nicht bewältigen kann?

was passiert, wenn der Empfänger die Datengeschwindigkeit über den Socket nicht bewältigen kann?

Ich habe zwei Prozesse, P1 (Absender) und P2 (Empfänger). P1 sendet unix-domain-socket (UDS)Daten an P2. Was passiert, wenn P1 Daten mit einer Rate von 100 Nachrichten/Sekunde sendet und P2 50 Nachrichten/Sekunde empfangen kann? Beide sind nicht blockierende Sockets.

Was passiert im obigen Szenario? Wird bei P1 oder P2 nach einiger Zeit der Speicher erschöpft sein?

Team, erklären Sie bitte, was im obigen Szenario unter der Haube passieren wird.

Danke.

Antwort1

Wenn der Empfänger nicht so schnell liest wie der Sender sendet, füllen sich die Socket-Puffer nach einer Weile.

Bei einem Datagramm-Socket-Typ würde ein blockierender Socket blockieren, wenn die Puffer voll sind, und so den Sender implizit verlangsamen. Bei einem nicht blockierenden Socket würde das Senden einer Nachricht einfach fehlschlagen und EAGAINvon als Fehler zurückgegeben werden send. Beachten Sie, dass dies nur für Unix-Domain-Sockets vom Typ Datagramm gilt. Bei UDP-Sockets wäre das Senden erfolgreich und Nachrichten würden einfach verloren gehen.

Bei einem Stream-Socket kann eine Teilnachricht geschrieben werden, unabhängig davon, ob der Socket blockiert oder nicht blockiert. Der Sender muss prüfen, wie viele Bytes tatsächlich geschrieben wurden (Rückgabe von send) und sicherstellen, dass die restlichen Daten später gesendet werden. Bei einem nicht blockierenden Socket sendkönnte dies auch bei fehlschlagen EAGAIN, bei einem blockierenden Socket würde es stattdessen blockieren und warten, bis der Empfänger einige Daten liest, um wieder Platz im Socket-Puffer zu haben.

verwandte Informationen