Es sieht so aus, als wäre die max. Größe eines Blocks ein High(Word). Ich werde versuchen schon beim Versenden diese max. Blockgröße nicht zu überscheiten.
Versuch dein Glück, wenn du auf Redeemer und mich nicht hören willst, aber erwarte nicht, dass es zuverlässig funktioniert.
Die 65k bzw. mitlerweile meisten 256k, von denen man öfters mal liest, beziehen sich auf die Größe des internen Empfangs-Buffers unter Windows und nicht auf die MTU. Die
EINZIGE zuverlässige Methode bei
TCP ist eine eigene Pakettrennung. Denn selbst, wenn du es schaffen würdest dich immer korrekt an der MTU zu orientieren, dann schützt dich das weiterhin nicht davor, dass mehrere kleine Pakete zu einem großen Datenblock auf Empfängerseite zusammengefügt werden.
Mein Beispiel verwendet zwar keine Sockets, simuliert aber beide der primären Situationen, die beim Versand von Daten per
TCP Socket auftreten und ist demnach absolut das, was du haben möchtest. Die
Recv
Methode kannst du praktisch 1 zu 1 übernehmen und mit den Daten des Sockets füllen und beim
Send
schickst du halt schnell einen
UInt32
mit der Gesamtdatenmenge des Pakets vorweg. Ist kein großer Aufwand.