我在C中有一个简单的UDP套接字程序。客户端将数据传输到服务器并接收确认。我已经知道如何配置超时,这样如果'recvfrom()'在一定时间内没有收到任何警报就会响起。
但是,还有一些我需要处理的情况。如果我收到来自意外地址的回复或回复格式不正确怎么办?我不想立即重新发送,只有当闹钟响起时。
如果我需要澄清,请告诉我。
答案 0 :(得分:1)
查看select(2)
和poll(2)
- 您可以在套接字上等待指定的时间。如果需要,您可以使用较小的超时重新启动等待。
如果您使用的是Linux,请查看epoll(7)
和timerfd_create(2)
。
答案 1 :(得分:0)
如果要检查并查看它们是否来自意外地址,或者格式不正确,您将不得不对收到的数据报进行处理。为了使这些案例更容易处理,您应该构建一个处理不同情况的状态机。
例如,您可以拥有以下状态:
此外,如果您检测到其中一个其他错误情况并且您不想立即重新发送,则需要某种计时器或睡眠条件才能等到您准备好重新传输。