- 论坛徽章:
- 0
|
我做过类似的东西,和你的出奇的像,不过都是自己的做法,没有问过别人好不好,也没参考过别的资料
仅供参考
要考虑的东西有一些
首先,局域网这几个可以去掉吗?最好是别假设局域网,当然除非这样做能带来很多好处, 还有其实非常重要的,有必要吗假设是在局域网中吗?
其次,客户多吗?估计你的客户不多,不过多不多都只会影响到你的实现机制而已
还有一些,做的越简单越好,呵呵
我把我的代码抄出来,见笑了
while(1) {
等待数据产生
delete_error_cli(); 删除无效用户的数据结构,比如连接断了,或者写数据超时等
fd_set readfds;
fd_set writefds;
int n;
g_select(&readfds,&writefds,&n,&tv);//我的客户也就那么几个十几个,数据也不多,select足够,
n = select(n, &readfds, &writefds, NULL, &tv);
if (n > 0) {
/* unlikely */
if (FD_ISSET(listenfd_desk, &readfds)) { 有新客户,接受新客户连接
n--;
accept_cli();
}
DeskCli *cli;
for (cli = first_deskcli; n && cli; cli = cli->next) {
if (is_new_cli(cli)) {
if (FD_ISSET(cli->fd, &readfds)) {
n--;
read_data(cli);
set_cli(cli);
}
} else if (FD_ISSET(cli->fd, &writefds)) {
n--;
send_alertlog(cli);
}
} |
|
|
|