【问题标题】:How do I cause a message to be dropped after 1 second? (UDP client/server in C)如何在 1 秒后丢弃消息? (C 中的 UDP 客户端/服务器)
【发布时间】:2016-02-07 16:50:16
【问题描述】:

我有一个基于 http://cs.baylor.edu/~donahoo/practical/CSockets/code/UDPEchoClient.c 的 UDP 客户端 客户端发送消息,服务器将其回显。我有一个可配置的服务器,我可以在其中丢弃数据包,并且我正在发送多条消息,而不是上面链接的代码中的 1 条。如果超过 1 秒,如何让消息丢失?截至目前,我在 recvfrom() 中获取每条消息后正在检查它,但我希望我的整个程序在 ~1.5 秒内运行,因为我不想为每条消息等待 1 秒(如果有很多消息)。有没有办法像计时器或其他东西一样附加到每条消息,以便如果在 1 秒内没有收到它,它会认为自己被丢弃?谢谢!

【问题讨论】:

  • 那么,如果recvfrom() 在收到消息后 1 秒内没有从内核的传入队列中检索到消息,您希望 服务器 丢弃它吗?操作系统不提供该功能。如果一个数据包被放入队列,它会一直留在队列中直到被读取。如果由于调用recvfrom() 不够频繁而导致队列填满,后续 数据包将自动丢弃,直到队列中的空间被清除。如果这不是您想要的,请更频繁地致电recvfrom()(例如在专用线程中)并管理您自己的项目列表,然后您可以根据需要在列表项上放置计时器。

标签: c sockets udp client-server recvfrom


【解决方案1】:

对 UDP 数据包使用 TTL

int ttl = 60; /* max = 255 */
setsockopt(s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));

【讨论】:

  • 这无济于事。 TTL 更准确地称为“跳数限制”,它与时间无关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 2017-07-30
  • 2020-03-02
  • 1970-01-01
  • 2023-03-18
相关资源
最近更新 更多