繁体   English   中英

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

[英]How do I configure a retransmit timeout in a C UDP socket program?

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

但是,我还需要处理其他几种情况。 如果我收到来自意外地址的答复,或者答复的格式不正确怎么办? 我不希望仅在警报响起时立即重新发送。

让我知道是否需要澄清。

查看select(2)poll(2) -您可以在套接字上等待指定的时间。 然后,可以根据需要以更短的超时时间重新开始等待。

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

如果要检查接收的数据报,并查看它们是否来自意外的地址或格式是否错误,则必须对其进行处理。 为了使处理这些案件更加容易,您应该构建一个处理不同案件的状态机。

例如,您可能具有以下状态:

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

同样,如果您检测到这些其他错误情况之一,并且不想立即重传,则将需要某种计时器或睡眠条件来等待,直到准备好重传为止。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM