首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

socket 编程有关问题?

2012-02-03 
socket 编程问题??我写的通信程序,为什么在本机上运行几分钟后,cpu占用率奇高??[解决办法]C/C++ code[colo

socket 编程问题??
我写的通信程序,为什么在本机上运行几分钟后,cpu占用率奇高??

[解决办法]

C/C++ code
[color=#FF0000]while(1)[/color]{bzero(receive,MAX_CMD);if( read(peer_sockmsg,receive,MAX_CMD) == -1 ){perror("read error\n");exit(1);}if( !strcmp(receive,"quit")){cmd_quit(peer_sock,peer_sockmsg);continue;}else if( !strcmp(receive,"cd") ){cmd_cd(peer_sock,peer_sockmsg);continue;}else if( !strcmp(receive,"dir") ){cmd_dir(peer_sock,peer_sockmsg);continue;}else if( !strcmp(receive,"qwd") ){cmd_qwd(peer_sock,peer_sockmsg);continue;}else if( !strcmp(receive,"get") ){cmd_get(peer_sock,peer_sockmsg);printf("here!\n");//debugcontinue;}/* incomplited*/}}}[color=#FF0000]while(1);[/color]}
[解决办法]

 你do {} while(1) 循环fork一次建立一个子进程

你说父进程用于accept,这个没错

 可你干嘛在子进程里面又while(1)啊?

每个子进程不停的read?

 就是说你开无数个进程,每个进程都无限循环read

最终造成资源被耗尽 ....

 你这种设计就不对!

如果你非要坚持用死循环,也只能在父进程用,子进程用完就exit退出

 再具体就没得说了 ....

[解决办法]

等等,等等,等等,你这个服务器不是短连接吗?

客户端connect完就close,不是吗?(我一直是按这个思路走的)

如果是这样,你子进程的read阻塞读取就没有意义

反过来说,如果是长连接,出现资源耗费的情况,那问题就在客户端了

[解决办法]
如果你确认为长连接的话,那最好检查一下你客户端的代码是否有问题吧

如果你客户端代码存在close关闭连接的情况

就会出现服务端大量子进程造成资源浪费导致资源最终被耗尽

热点排行