11. oktober 2007 - 00:43Der er
8 kommentarer og 1 løsning
recv() hænger
Jeg har sat mit program til at lytte på en port og tage imod indkommende forbindelser. Når jeg prøver at læse fra den åbnede forbindelse, bliver den sidste recv() aldrig færdig, da browseren ikke sender mere data.
Den skal afslutte, når client afslutter forbindelsen.
Men hvis du gerne vil process noget når du har modtaget \r\n\r\n, så skal du lave noget a la:
int lenn,ix; char buf[10000]; ix = 0; while((len = recv(sd, buf + ix, sizeof(buf) - ix, 0)) > 0) { ix += len; if(strnstr(buf, "\r\n\r\n", ix) != NULL) break; } buf[ix] = '\0'; // process første del af buf - husk at gem sidste del af buf
int lenn,ix; char buf[10000]; ix = 0; while((len = recv(sd, buf + ix, sizeof(buf) - ix, 0)) > 0) { ix += len; buf[ix] = '\0'; if(strstr(buf, "\r\n\r\n") != NULL) break; } // process første del af buf - husk at gem sidste del af buf
Synes godt om
Slettet bruger
15. oktober 2007 - 10:18#6
Også fejl:
error: no matching function for call to âstrstr(char [10000], const char [5], int&)â /usr/include/string.h:195: note: candidates are: char* strstr(const char*, const char*) /usr/include/c++/4.2/cstring:125: note: char* std::strstr(char*, const char*)
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.