Я написал код для обработки получения UDP-пакетов. Все пакеты имеют одинаковую длину (120 байт), и каждую секунду приходит около 1000 пакетов. Просто мой код такой.
int sock = -1;
int flag = 0;
int nRead = 0;
#define LOCAL_BUFF_SIZE (8192)
char buff[LOCAL_BUFF_SIZE];
struct sockaddr_in sockAddr;
memset((void *)&sockAddr, 0x00, sizeof(struct sockaddr_in));
if((sock = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
{
/* Print error and terminate */
}
/* Make it non-blocking */
flag = fcntl( sock, F_GETFL, 0 );
fcntl( sock, F_SETFL, flag | O_NONBLOCK );
sockAddr.sin_family = AF_INET;
sockAddr.sin_port = htons(portNum);
sockAddr.sin_addr.s_addr = INADDR_ANY;
if(bind(sock, (struct sockaddr *)&sockAddr, sizeof (sockAddr)) < 0)
{
/* Print error and terminate */
}
while(...)
{
nRead = recv(sock, buff, LOCAL_BUFF_SIZE, 0);
if(nBytes > 0)
{
/* Process the data */
}
else
{
/* If it's error, handle error */
}
}
Когда я писал этот код, я ожидал, что функция recv() возвращает все байты в буфере сокета UDP в этот момент, но кажется, что она каждый раз возвращает только один пакет (120 байт), даже если в буфере больше байтов. . Итак, теперь я столкнулся с потерей пакетов. Я знаю, что есть много других способов решить эту проблему, но на данный момент чтение всех существующих байтов в буфере UDP за раз — это самый простой способ для меня. Итак, есть ли способ прочитать все байты в буфере UDP сразу?
заранее спасибо