2012-03-02 17 views
1

我有一个简单的UDP套接字程序在C.客户端传输数据到服务器并收到确认。我已经知道如何配置超时,以便如果'recvfrom()'在一段时间内没有收到任何消息,闹钟就会响起。如何在C UDP套接字程序中配置重传超时?

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

让我知道我是否需要澄清。

+0

报警?你是从beej网络代码中挑选出来的吗? – tbert 2012-03-02 17:04:20

+0

谁/什么是beej? – Groppe 2012-03-02 17:21:08

回答

1

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

如果您在Linux上,请查看epoll(7)timerfd_create(2)

0

如果您想检查并查看它们是来自意外地址还是格式不正确,您将必须对收到的数据报进行处理。为了更轻松地处理这些案例,您应该构建一个状态机来处理您的不同案例。

例如,你可以有以下状态:

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

此外,如果您发现之一这些其他的错误条件,你不想立即重新发送你将需要你一些定时器或睡眠con要等到你准备好转发。