我不是网络编程方面的专家。我基本上有两种客户,他们有不同的超时时间。我应该使用带有连接套接字的 UDP 进行客户端-服务器通信。
问题是双重的:
a) 我需要将任何客户端(或者套接字)在 t1 秒内没有响应的情况标记为已死亡。如果 read_fd_set 中的任何套接字都没有在超时值内读取任何内容,则使用 select 将超时。那么,如何让任何一个在相当长一段时间内没有数据读取的套接字超时?
- 目前,每当 select 返回时,我自己都会跟踪哪些套接字正在响应,哪些没有。我将 t1.tu_sec 添加到每个客户端(套接字)的单独经过时间。然后,我手动关闭并从 FD_SET 中排除在 (n) * (t1.tu_sec) 时间内没有响应的套接字。这是一个足够好的方法吗?
b) 主要问题是有两种客户端有不同的超时时间,t1 和 t2。我该如何处理?
- 我可以在同一个循环中为两种客户端设置两个 select() 吗?没有线程会导致饥饿吗?在这种情况下是否建议(甚至需要)使用线程?
我已经在网上漫游了很多年了!
任何帮助深表感谢。