/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
Linux: Sockets, recv og select
Fra : Jens


Dato : 29-06-03 20:07

Hej Alle Sammen

Jeg sidder her og forsøge at skrive en funktion, som skal sikker
at jeg har modtaget alt sendt data fra en server.
Jeg kan blot ikke få det til at virke:

Her er koden.

string hent_post::recvall(int socket ,char* mbuf, int buffer_size, int flag)
{
    // Variabler
    fd_set rfds;
struct timeval tv;
int data_klar;
    int bytes_modtaget;
    string data;
   
   
// Sætter til non block
fcntl(sock, F_SETFL, O_NONBLOCK);


// Vent i op til 1 sek.
    tv.tv_sec = 1;
FD_ZERO(&rfds);
FD_SET(socket, &rfds);

if(select(socket+1, &rfds, NULL, NULL, &tv))
do
{
data += mbuf;
mbuf[0]= '\0';
bytes_modtaget = recv(sock, mbuf, 1500, 0);
       mbuf[bytes_modtaget]='\0';
   
    }while (bytes_modtaget != -1);

return data;
}


Men stadig væk modtager jeg ikke alt den data. som server sender.
bytes_modtaget modtaget bliver -1, hvis der blot er den midste ophold
fra serveren side.

Jeg ville gerne have select inden recv, men når jeg så kalder funktionen
igen. Så sker der ikke noget.

Jeg håber at nogle kan se hvad jeg gør galt.

Mvh.
Jens


 
 
Kent Friis (29-06-2003)
Kommentar
Fra : Kent Friis


Dato : 29-06-03 20:31

Den Sun, 29 Jun 2003 21:07:13 +0200 skrev Jens:
>
>
> if(select(socket+1, &rfds, NULL, NULL, &tv))
> do
> {
> data += mbuf;
> mbuf[0]= '\0';
> bytes_modtaget = recv(sock, mbuf, 1500, 0);
>        mbuf[bytes_modtaget]='\0';
>    
>     }while (bytes_modtaget != -1);
>
> return data;
>}
>
>
>Men stadig væk modtager jeg ikke alt den data. som server sender.
>bytes_modtaget modtaget bliver -1, hvis der blot er den midste ophold
>fra serveren side.

Du skal have select() ind i din while-løkke, så den venter på flere
data hver gang, i stedet for kun første gang.

Hvis du ikke venter på data, så vil den forsøge at læse med det samme,
og returnere -1 "Jeg har ikke modtaget noget endnu".

Mvh
Kent
--
If you think about it, Windows XP is actually the OS that
started as "Microsoft OS/2 NT 3.0"

Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408186
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste