Was ist die Mindestanzahl von Bytes, die zur Rückgabe von Socket.Receive führen?

Wir verwenden ein Anwendungsprotokoll, das den Längenindikator der Nachricht in den ersten 4 Bytes angibt. Socket.Receive gibt so viele Daten wie im Protokollstapel zum Zeitpunkt oder Block zurück, bis Daten verfügbar sind. Aus diesem Grund müssen wir kontinuierlich aus dem Socket lesen, bis wir die Anzahl der Bytes in der Längenangabe erhalten. Socket.Receive gibt 0 zurück, wenn die andere Seite die Verbindung geschlossen hat. Ich verstehe das alles.

Gibt es eine Mindestanzahl von Bytes, die gelesen werden müssen? Der Grund, den ich frage, ist aus der Dokumentation, dass es durchaus möglich ist, dass der gesamte Längenindikator (4 Bytes) nicht verfügbar ist, wenn Socket.Receive zurückkehren kann. Wir müssten es dann weiter versuchen. Es wäre effizienter, die Anzahl der Aufrufe von socket.receive so gering wie möglich zu halten, da Objekte in den Puffer und aus dem Puffer kopiert werden müssen. Ist es also sicherer, ein einzelnes Byte auf einmal abzurufen, um den Längenindikator abzurufen, kann man davon ausgehen, dass immer 4 Bytes verfügbar sind, oder sollten wir weiterhin versuchen, 4 Bytes mithilfe einer Offset-Variablen abzurufen?

Der Grund, warum ich denke, dass es eine Art Standard-Mindestniveau geben könnte, ist, dass ich auf eine Variable namens ReceiveLowWater gestoßen bin, die ich in den Socket-Optionen einstellen kann. Dies scheint jedoch nur für BSD zu gelten.MSDN Siehe SO_RCVLOWAT.

Es ist nicht wirklich so wichtig, aber ich versuche, Komponententests zu schreiben. Ich habe bereits einen Standard-.Net-Socket hinter eine Schnittstelle gewickelt.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage