如何在C中接收多个UDP数据包?

时间:2010-02-19 00:26:31

标签: c network-programming udp

我做了一个函数,将UDP数据包发送到服务器并获取返回的数据包。 当我进行单个recvfrom调用时,它可以工作,但我需要在定义的超时内从服务器获取所有潜在的数据包。

这是我的代码:http://pastebin.be/23548

有人能帮助我吗? 感谢。

1 个答案:

答案 0 :(得分:1)

您在套接字上设置的SO_RCVTIMEO选项实际上是一个不活动计时器。换句话说,通过设置RCVTIMEO,即使没有收到数据,也可以确保在定时器到期后recvfrom调用将返回。这听起来并不像你想要做的那样。

有几种方法可以做你要问的......这里有几个想法。

如果您对信号感到满意,可以使用'setitimer'来跟踪最大超时。 http://linux.die.net/man/2/setitimer

它将在计时器到期时向您的进程发送SIGALRM,并且在您的信号处理程序中,您可以设置一个标志,告诉您的recvfrom循环退出。

您也可以在起始点获取系统时间,然后在recvfrom循环中轮询它以查看是否已超过所需的超时值。 http://dell5.ma.utexas.edu/cgi-bin/man-cgi?gettimeofday+2