免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2826 | 回复: 2
打印 上一主题 下一主题

写多进程并发服务器程序的一个问题!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-08-17 10:37 |只看该作者 |倒序浏览
我的程序框架如下:
int unicomServer::Run()
{
        pid_t pid;         
        int iStatus;
        socklen_t addr_size = (int)sizeof(remote_sin);
       
          while (1)
          {
                  conn_socket = accept(Mysocket, (struct sockaddr *)&remote_sin, &addr_size);                   
                  if (conn_socket < 0)
                  {
                              socket_error = MySOCKET_ACCEPT_ERROR;
                              return -1;
                    }
                    if ((pid = fork()) >; 0)
                    {
                            //while (wait(&iStatus) != pid);                            close(conn_socket);//父进程关闭连接描述符
                            continue;                           
                    }
                    else if (pid == 0)
                    {
                            close(Mysocket);//子进程关闭监听描述符
                            analyzePackage(conn_socket);
                            exit(0);
                    }
            }

              return 0;
}
现在的问题是:
1.如果有多个客户端来请求那么主进程应该分配多个socket,然后主进程fork多个进程处理多个socket的请求,然后再将结果通过不同的socket返回给不同的客户端,不过如果按我这么写,在fork之后的父进程里close(conn_socket)似乎将连接关闭之后,再来客户端还是分配原来的那个socket,如:客户端1的socket是4,客户端2的socket还是4,客户端3可能还是4,那么我再处理完成请求之后,如何区分将拿一个请求发给socket对应的客户端呢?如果选择在复进程中不关闭socket,倒是可以解决这个问题,不过如果不关闭socket那么客户端多了之后是不是因打开的socket描述符过多而报错呢?如果解决这一个问题呢?
2.在复进程中是否要加上while (wait(&iStatus) != pid);    这句呢,如果加上似乎要阻塞,直到处理完成当前请求之后才能分配下一个socket,也就是处理下一个请求,那么这样似乎是一个请求一个请求那么处理的,似乎没有起到并发服务器的作用,那么这里是否有必要加上wait呢?

论坛徽章:
0
2 [报告]
发表于 2003-08-17 16:07 |只看该作者

写多进程并发服务器程序的一个问题!!

你的程序结构有问题.网上讨论并发服务器模型及讲解实例的文章很多,去看看吧.我以前看过的一篇,介绍服务器模型的文章,先看看
http://www.fanqiang.com/a4/b7/20010508/112359.html

论坛徽章:
0
3 [报告]
发表于 2003-08-17 20:16 |只看该作者

写多进程并发服务器程序的一个问题!!

原帖由 "xa_butterfly" 发表:
你的程序结构有问题.网上讨论并发服务器模型及讲解实例的文章很多,去看看吧.我以前看过的一篇,介绍服务器模型的文章,先看看
http://www.fanqiang.com/a4/b7/20010508/112359.html
   
我的结构的问题在哪里???
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP