如何检查在下面的示例代码中,在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); 
    } 
} 
+1

您可以使用('select')[linux.die.net/man/2/select]函数来知道某个东西已准备好在套接字上读取。 – purplepsycho

+0

是选择工作。谢谢。 – Brian

您可以使用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的返回值以验证收到的数据包大小。