Я написал код, чтобы обрабатывать прием UDP-пакетов. Пакеты имеют одинаковую длину (120 байт), и около 1000 пакетов поступают каждую секунду. Просто мой код такой.C - Чтение байтов из буфера сокета UDP (Linux)
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 сразу?
Заранее спасибо
спасибо. Это то, что я искал. –