如何在C UDP套接字程序中配置重新传输超时?

时间:2012-03-02 15:51:05

标签: c sockets udp alarm

我在C中有一个简单的UDP套接字程序。客户端将数据传输到服务器并接收确认。我已经知道如何配置超时,这样如果'recvfrom()'在一定时间内没有收到任何警报就会响起。

但是,还有一些我需要处理的情况。如果我收到来自意外地址的回复或回复格式不正确怎么办?我不想立即重新发送,只有当闹钟响起时。

如果我需要澄清,请告诉我。

2 个答案:

答案 0 :(得分:1)

查看select(2)poll(2) - 您可以在套接字上等待指定的时间。如果需要,您可以使用较小的超时重新启动等待。

如果您使用的是Linux,请查看epoll(7)timerfd_create(2)

答案 1 :(得分:0)

如果要检查并查看它们是否来自意外地址,或者格式不正确,您将不得不对收到的数据报进行处理。为了使这些案例更容易处理,您应该构建一个处理不同情况的状态机。

例如,您可以拥有以下状态:

  • 读取超时
  • 数据格式错误
  • 无效的传输地址
  • 有效数据

此外,如果您检测到其中一个其他错误情况并且您不想立即重新发送,则需要某种计时器或睡眠条件才能等到您准备好重新传输。