【发布时间】:2012-09-26 10:56:55
【问题描述】:
我不是网络编程方面的专家。我基本上有两种客户,他们有不同的超时时间。我应该使用带有连接套接字的 UDP 进行客户端-服务器通信。
问题是双重的:
a) 无论哪个客户端(或者套接字)在 t1 秒内没有响应,我都需要将其标记为已死亡。如果 read_fd_set 中的任何套接字都没有在超时值内读取任何内容,则使用 select 将超时。那么,如何让任何一个在相当长一段时间内没有数据读取的套接字超时?
- 目前,每当 select 返回时,我自己都会跟踪哪些套接字正在响应,哪些没有。我将 t1.tu_sec 添加到每个客户端(套接字)的单独经过时间。然后,我手动关闭并从 FD_SET 中排除在 (n) * (t1.tu_sec) 时间内没有响应的套接字。这是一个足够好的方法吗?
b) 主要问题是有两种客户端有不同的超时时间,t1 和 t2。我该如何处理?
- 我可以在同一个循环中为两种客户端设置两个 select() 吗?没有线程会导致饥饿吗?在这种情况下是否建议(甚至需要)使用线程?
我已经在网上漫游很久了!
非常感谢任何帮助。
【问题讨论】:
-
能否请您重新格式化您的问题(即分段符等),以便它真正可读?
-
哦!我确实设置了中断,但我不知道网站需要的格式。显然简单的换行符是不够的。让我做必要的事情。
-
您不能同时阻止两个 select() 调用。要么将所有 fd 放入一个 fd_set,要么使用两个 fd_set,然后交替调用它们。 (IIRC 后一种技术有时用于将 fast 与 slow fds 分开)