【问题标题】:How can timeout be implemented given the blocking nature of recvfrom and sendto?鉴于 recvfrom 和 sendto 的阻塞性质,如何实现超时?
【发布时间】:2013-11-07 13:46:48
【问题描述】:

我正在尝试在我的 UDP 停止等待中实现 TIMEOUT 功能。也就是说,我故意让我的接收者不发送ACK,并期望发送者在TIMEOUT之后重新发送。

但是,正如recvfrom 文档所说:

如果套接字上没有可用的消息,则接收调用会等待消息到达,除非套接字是非阻塞的。

所以我的发送者和接收者都卡在sendto()recvfrom()。他们都挂了!最好有办法让代码继续运行,从而实现TIMEOUT

我该怎么做?

【问题讨论】:

    标签: c sockets


    【解决方案1】:

    通过setsockopt() 函数设置SO_RCVTIMEO 选项。然后,如果超时触发,recvfrom() 将返回 -1,errno 设置为 EAGAINEWOULDBLOCK

    【讨论】:

    • 这就是我最终选择的方式。谢谢!
    【解决方案2】:

    看看函数selectpollepoll。他们可以帮助超时。在等待多个文件描述符(套接字)时,它们也非常有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-06
      • 2013-02-13
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      相关资源
      最近更新 更多