Я получаю строку и сохраняю ее во входном буфере. Это поток и строка могут быть неполными, поэтому я ищу последнюю STOP-строку, скопирую остальную часть (которая начинается в следующий блок) и добавляет данные из следующей доставки за скопированные данные.
В промежутке я делаю некоторые операции над входным буфером (например, memcpy). Должен ли я сделать копию входного буфера или я могу использовать input_buffer, который у меня есть?Получение данных из потока непрерывно и поток чтения
Некоторые люди говорили мне, что это не имело бы никакого смысла:
if (bytes_received == 0) {
continue;
}
Но это поток. Если это не имеет смысла, как я могу заверить, что я буду постоянно получать данные?
char * strrstr(char *string, char *find, ssize_t len)
{
char *cp;
for (cp = string + strlen(string) - 4; cp >= string; cp--)
{
if (strncmp(cp, find, 4) == 0)
return cp+4;
}
return NULL;
}
int main (void) {
char * input_buffer = malloc(MAXLENGTH);
size_t restSize=0;
char * restP;
int socket_handle = reqData(subStr);
ssize_t bytes_received ;
for (;;) {
bytes_received = recv (socket_handle , input_buffer+restSize ,MAXLENGTH-1, 0) ;
input_buffer[bytes_received-1] = '\0';
if (bytes_received == -1) {
printf ("-1 An error occured during the receive procedure \n") ;
return 0 ;
}
if (bytes_received == 0) {
printf ("0 An error occured during the receive procedure \n") ;
return 0 ;
}
restP = strrstr (input_buffer, STOP, 4);
if (restP == NULL)
{
restSize = 0;
continue;
}
restSize = strlen(restP);//MAXLENGTH - (restP - input_buffer) + 1;
processXML(input_buffer, restP, t);
strcpy(input_buffer, restP);
}
close(socket_handle);
free (input_buffer);
return 0 ;
}