Обычно при отправке пакетов произвольного размера устанавливается максимум и используется как размер вашего буфера приема.Получить реальный размер полученного пакета
#include <winsock2.h>
// Socket Description
// Hint.ai_family = AF_INET;
// Hint.ai_socktype = SOCK_DGRAM;
// Hint.ai_protocol = IPPROTO_UDP;
void Send(int Size)
{
char *Data = (char *)malloc(Size);
sendto(Socket, Data, Size, NULL, Result->ai_addr, Result->ai_addrlen)
}
void Receive()
{
const unsigned int MaxDataSize = 1436;
char *Data = (char *)malloc(MaxDataSize);
recvfrom(Socket, Data, MaxDataSize, 0, (SOCKADDR*)&RecvAddr, &RecvAddrSize);
}
В этом псевдо примере, независимо от размера данных передается Send()
, наша Receive()
функции всегда получает ее максимальный размер, определенный.
Как определить размер исходных отправленных пакетов?
Вам нужно предоставить больше контекста, например, какой сокет это? Каков размер данных, которые вы отправляете? И вы * делаете * проверяете результат 'sendto' и' recvfrom'? Кроме того, это почти не связано с C++ (или вы будете использовать 'new' вместо' malloc'), поэтому, пожалуйста, обновите теги. Неполадка тегов. –
Вы считали, что консультируетесь со страницей [* man * для * recvfrom() *] (http://linux.die.net/man/2/recvfrom)? – EJP
'recvfrom' возвращает размер пакета ... – immibis