如何检查在下面的示例代码中,在C Linux
问题描述:
“recvfrom()”中收到的UDP数据包是否等待,直到收到UDP数据包。如何检查在下面的示例代码中,在C Linux
但我需要检查UDP数据包是否可用。 如果没有收到数据包,则继续其他任务。 如果接收到数据包,则接收数据包并进行解析。 如何在Linux c程序中执行此操作?请帮忙!
for (;;)
{
printf("waiting on port %d\n", SERVICE_PORT);
recvlen = recvfrom(fd, buf, BUFSIZE, 0, (struct sockaddr *)&remaddr, &addrlen);
printf("received %d bytes\n", recvlen);
if (recvlen > 0) {
buf[recvlen] = 0;
printf("received message: \"%s\"\n", buf);
}
}
答
您可以使用select
函数来知道某个东西已准备好在套接字上读取。
while (1)
{
int retval;
fd_set rfds;
// one second timeout
struct timeval tv = {1,0};
FD_ZERO(&rfds);
FD_SET(fd, &rfds);
retval = select(1, &rfds, NULL, NULL, &tv);
if (retval == -1)
{
perror("select()");
exit(1);
}
else if (retval)
{
printf("Data is available now.\n");
}
else
{
// no data to read... perform other tasks
}
}
+0
是选择工作。谢谢。 – Brian
答
您可能会在代码中等待几秒钟。如果您在那段时间内没有收到数据包,请让它进一步处理。否则检查recvfrom的返回值以验证收到的数据包大小。
您可以使用('select')[linux.die.net/man/2/select]函数来知道某个东西已准备好在套接字上读取。 – purplepsycho
是选择工作。谢谢。 – Brian