Hej Duper
når du opretter en socket bliver den oprettet som en blocking socket per default.. Det betyder at hvis du kalder recv() så "blocker" recv() indtil den har modtaget data, som den derefter returnerer til dit program. At den blocker vil sige at funktionen ikke returnerer til dit program førend der er data at hente. recv() returnerer et tal som er det antal bytes der er blevet kopieret til den buffer du specificerede i kaldet. Du skal være opmærksom på at recv() ikke nødvendigvis modtager det antal du har bedt den om (skyldes beslutninger i IP laget i kernel). Derfor er du nød til at tjekke returværdien og hvis alle bytes'ne ikke er læst.. så læse den igen indtil du har det hele :-).. Ikke for at fornærme dig men din brug af
recv() virker ikke.. du kan ikke kalde den EN gang og forvente at modtage tæt på en megabyte (1000000 bytes). Dette skyldes at KERNEN i linux (og alle andre OS'er som implementerer en TCP/IP stack) bryder din TCP stream op i packets. Hvis du er heldig kan du sende 64 kb på en gang.. Men selvom du kalder recv() forkert burde den stadigvæk blocke og dit sleep() kald burde være unødvendigt (btw brug ALDRIG sleep() til den slags *s*). Dette leder mig til at tro at du måske bruger nonblocking sockets. For at kontrollere disse skal du under linux bruge select() kaldet (kan også med fordel bruges på blocking sockets).. Select er temmelig avanceret men kort forklaret er det en funktioner der fortæller dig om dine socket(s) er klar til blive læst fra, skrevet til eller om de har "raised exceptions" (at der er opstået fejl). Jeg kan ikke forklare dig select() kaldet i detaljer her, men du kan slå det op. Forresten gælder det samme for send() som for recv(), du kan ikke være sikker på at samtlige bytes bliver sent på en gang. Derfor skal du ALTID tjekke returværdien *s*.. Mit råd til dig er at læse lidt op på socket programmering.. her er to gode links:
// godt site der med små tutorials forklarer hvordan du bruger BSD sockets (dem du bruger) under unix (som i denne forbindelse er det samme som linux)
http://www.ecst.csuchico.edu/~beej/guide/net/html/og
http://tangentsoft.net/wskfaq/// winsock faq'en.. handler godt nok om windows socket men det er stort set det samme som linux sockets udadtil (flere funktioner og anderledes initializering).. Men der er en masse gode forklaringer
Kan du slet ikke få det til at virke så kan du eventuelt maile mig sourcekoden.. så kigger jeg på den.. har dog ikke mulighed for at teste den i det jeg ikke kører linux :-).. men kan ihvertfald spotte de største fejl og mangler :-)
håber du kunne bruge det til noget..
Tilsidst vil jeg lige nævne at TCP/IP programmering er et temmelig avanceret område.. det kan godt tage lidt tid at forstå det hele så du skal ikke lade dig slå ud hvis det ikke virker de første 10-50 gange.. det gjorde heller ikke for mig :-)