【发布时间】:2010-02-19 00:26:31
【问题描述】:
我创建了一个函数来向服务器发送一个 UDP 数据包并获取返回的数据包。 当我进行单个 recvfrom 调用时,它可以工作,但我需要在定义的超时时间内从服务器获取所有潜在的数据包。
这是我的代码:http://pastebin.be/23548
有人可以帮助我吗? 谢谢。
【问题讨论】:
标签: c network-programming udp
我创建了一个函数来向服务器发送一个 UDP 数据包并获取返回的数据包。 当我进行单个 recvfrom 调用时,它可以工作,但我需要在定义的超时时间内从服务器获取所有潜在的数据包。
这是我的代码:http://pastebin.be/23548
有人可以帮助我吗? 谢谢。
【问题讨论】:
标签: c network-programming udp
您在套接字上设置的 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
【讨论】: