免费注册 查看新帖 |

Chinaunix

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

如何用select检测在一组进程中有accept/connect 事件? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-07-19 19:12 |只看该作者 |倒序浏览
main( int argc , char ** argv )
{
   sockid = socket( ... ) ;
   bind( sockid ) ;
   listen( sockid ) ;

// 下面创建进程池,由该组进程对该 socket id 进行 select 调用,来检测 accept 和 read/write 事件。
   
   for( i = 0 ; i < 10 ; i++ ) {
      if ( fork( ) >; 0 ) continue ;

      while( 1 ) {
          fd_set   rfds ;

          FD_ZERO( &rfds ) ;
          FD_SET( sockid , &rfds ) ;
          FD_SET( 其它 socket 句柄,由 accept 调用新产生的 , &rfds ) ;

          select( maxfds , &rfds , NULL , NULL , &timeout ) ;

          if ( FD_ISSET( sockid , &rfds ) ) {
               newsockid = accept( sockid , ... ) ;

               break ;
          }

          if ( FD_ISSET( newsockid , &rfds ) ) {
               read/write( newsockid , ... ) ;

               break ;
          }
      }
   }
}

我就是有个疑问,这样的结构能够在目前主流的unix操作系统上正常运行吗?性能如何?

如果不行,还有其它方法吗 ?

我是用该模型来解决海量的并发交易处理的。

还有其它什么好的模型吗 ?


wustevens@sina.com
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP