TheMaister Skrevet 14. januar 2010 Del Skrevet 14. januar 2010 (endret) Hei. Har et lite problem med nettverksprogrammering. Jeg sender lyd over nettverket, som blir spilt av hos serveren. Et litt plagsomt problem er at når jeg eventuelt velger å avslutte klienten med SIGINT eller rett og slett close(), klarer serveren fortsatt å lese omlag 2 sekunder med lyddata før recv() på serversiden returnerer 0. I noen tilfeller har det tatt opp til 7-8 sek fra close() til recv() == 0. Det tyder jo på at jeg får lagret opp en stor buffer "behind the scenes" siden jeg prøver å sende lyd så fort som det er mulig til serveren, men at serveren ikke merker at jeg faktisk har kjørt close(). Er det en enkel måte å unngå dette på? En løsning kunne ha vært å cappe hvor stor nettverksbufferen var for den enkelte socketen. Noen ti-dels sekunder latency mellom close() og recv() == 0 er ikke noe problem. Koden jeg bruker er noe ala dette: Begge socketene er ikke satt til non-blocking. Klient: for(;;) { read(STDIN, buffer, size); send(socket, buffer, size, 0); } Server: for(;;) { recv(socket, buffer, size, 0); play_audio(buffer, size); } EDIT: Nei, skulle du ha sett hva setsockopt() kunne gjøre ... Endret 14. januar 2010 av TheMaister Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå