Я сделал TCP клиент / сервер, и я хочу отправить запрос, но функция recv теряет данные (3-е первые байты отправленного буфера)
Я много чего перепробовал:
-печать printf везде
- изменить номер порта
- изменить / оптимизировать мой код
- использовать проволочную акулу
-используются флаги MSG_WAITALL и MSG_PEEK в цикле, в то время как размер получаемых байтов отличается от размера буфера, отправляемого ранее (и я видел, что буфер, хранящийся в сокете, обрезан, поэтому я теряю байты между send () и recv () ?)
-Может быть и другие вещи, но я не помню.
int send_net(SOCKET socket, const char *buffer)
{
if (send(socket, ft_itoa(strlen(buffer) + 1), strlen(ft_itoa(strlen(buffer))) + 1, 0) == -1)
{
perror("send size");
return -1;
}
if (send(socket, buffer, strlen(buffer) + 1, 0) == -1)
{
perror("send buffer");
return -1;
}
return 0;
}
char *recv_net(SOCKET socket)
{
unsigned int size;
char *buffer = NULL;
int bytes;
buffer = calloc(6, sizeof(char));
if ((bytes = recv(socket, buffer, 6, MSG_WAITALL)) == -1)
{
perror("recv size");
return NULL;
}
size = atoi(buffer);
buffer = realloc(buffer, sizeof(char) * size);
bzero(buffer, size);
if ((bytes = recv(socket, buffer, sizeof(char) * size, MSG_WAITALL)) != -1)
{
perror("recv buffer");
return NULL;
}
return buffer;
}
Я хочу отправить «Список хостов» и получаю «Список хостов».