Styre pakkestørrelse i TcpClient
HejsaJeg har behov for at kunne styre størrelsen af den pakker mit program sender, da jeg skal sender over en GRE-tunnel, hvor ICMP er blokeret. Så vidt jeg ved betyder det, at den maksimale størrelse ikke kan auto-negotiates, og derfor er jeg nødt til at afsende pakker på ~1360 byte, så størrelsen inkl. header bliver under ~1420 bytes. Andre programmer der bruger tunnellen har også måtte tilpasse deres pakkestørrelse til dette krav. Det er ikke muligt at ændre MTU i registry'en
Jeg kan bare ikke finde noget i .NET dokumentationen om hvordan man stører pakkestørrelsen, og Google antyder at jeg er er den første med dette problem :)
koden, der fungerer fint over mindre strixe netværk, ser sådan ud:
NetworkStream ns = tcpClient.GetStream();
BinaryReader reader = new BinaryReader(fileStream);
byte[] bytes = new byte[1024];
int read;
while( ( read = reader.Read( bytes, 0, bytes.Length ) ) != 0 )
{
ns.Write(bytes,0,read);
}
reader.Close();
ns.Flush();
ns.Close();
Det forekom mig at hvis jeg kaldte Flush() inde i while'n, ville det fyre en pakke med 1024 bytes payload af, men Networkstream.Flush er åbenbart ikke brugbar - den er 'reserved for future use'
Socket.Send() tager tilsyneladende en int size, men msdn er lidt uklar mht. om det er den faktiske pakkestørrelse man styrer derigennem. det ville også være træls at kode det om til at bruge Sockets og teste det, hvis det kan gøres med en TcpClient ...?
Er der nogen der har en løsning eller et tip der kan få mig videre?
På forhånd tak..
