Avatar billede janrosgaard Nybegynder
01. maj 2003 - 13:54 Der er 3 kommentarer og
1 løsning

Socket programmering: Ændinrg af send buffer størrelse

Hejsa.

Jeg ønsker at sende en datamængde (100 kb. ca) over en asynkron stream socket. Jeg har kaldt WSAASyncselect med (FD_CONNECT | FD_READ | FD_WRITE).

Problemet opstår, når jeg ønsker at sende mine data, fordi Windows tilsyneladende gør det i ét hug. Det er normalt meget fint, men i mit særlige tilfælde ønsker jeg, at selvom jeg forsøger at sende 100 kb ad gangen, skal send() kun sende 2 kb og derpå give mig en FD_WRITE event, så jeg kan fortsætte med at sende. Jeg vil med andre ord gerne have sendt mine data i små klumper i stedet for hele molevitten på én gang. Grunden til at jeg ønsker dette er, at min applikation skal køre på en anden platform, hvor jeg *ved*, at man kun kan sende 1-2 kb ad gangen, og den opførsel vil jeg gerne emulere på Windows.

Jeg har forsøgt at kaldet setsockopt() og sætte SO_SNDBUF til lave værdier, men det er Windows tilsyneladende ligeglad med. Jeg har også forsøgt med TCP_NODELAY for at slå Nagle-algoritmen fra, men heller ikke det havde nogen større effekt.

Forslag modtages med kyshånd!

Mvh. Jan Rosgaard
Avatar billede mickni33 Nybegynder
01. maj 2003 - 14:16 #1
Har du kigget på funktionen malloc(); ?

Er det noget data du selv styre hvor meget det skal fylde eller er det noget data som kommer som en stor pakke som du så vil have splittet op ?
Avatar billede janrosgaard Nybegynder
01. maj 2003 - 14:22 #2
Det er data, som kommer i en stor pakke, og som skal splittes op, men jeg vil gerne have Winsock til at lave denne opsplitning.
Avatar billede mickni33 Nybegynder
01. maj 2003 - 14:41 #3
Kan ikke lave det rent kodemæssig men måske kunne man finde ud af hvor stor pakken er i binærtal og så dividere med 5 og sætte nyPakke1=delPakke1 nypakke2=delPakke2 osv osv
Avatar billede janrosgaard Nybegynder
01. maj 2003 - 15:00 #4
Jeg tror, jeg har fundet et brugbart workaround nu... :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester