【发布时间】:2012-11-24 22:45:34
【问题描述】:
我正在编写一个 UDP 服务器/客户端程序,其中服务器通过具有固定窗口大小的单个端口向客户端发送数据包,并且客户端将为收到的每个数据包发送回 ack 数据包。现在我希望服务器处理丢失数据包的情况。通过一些谷歌搜索,似乎我应该使用ALARM 或SELECT。我当然不想发送一个数据包,等待ack或超时,然后再发送另一个,但是SELECT会在超时期间阻塞调用函数,所以我认为这不好。 ALARM 也不好,因为一个程序只能有一个ALARM。那么有什么方法可以让我继续跟踪服务器发送的多个数据包的超时时间吗?
【问题讨论】:
-
既然担心丢包,为什么不使用TCP呢?我的理解是 UDP 最适合“一劳永逸”的情况,即可以接受一些丢包和排序不重要的情况。如果丢失任何数据包是不可接受的并且必须“按顺序”接收数据包,TCP 会处理跟踪、确认、重试和数据包排序。
标签: c udp timeout alarm select-function