1
我编写了代码以处理接收UDP数据包。这些数据包的长度都是相同的(120字节),每秒大约有1,000个数据包。简单地说,我的代码就是这样。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缓冲区中的所有字节?
预先感谢
谢谢。这正是我所期待的。 –