本版版主招募中

 
标题: 关于
zerocold
LU新生
Rank: 1



UID 361
精华 0
积分 5
帖子 10
活跃指数 0
LU金币 2006 个
LU金条 0 个
阅读权限 10
注册 2003-10-8
 
发表于 2004-4-16 18:23  资料  个人空间  短消息  加为好友 
在aix4.3上写了个服务段程序,代码大致如下:

CODE


int DoDeal()
{
    for(;;)
   {
        if (accept() < 0)
        {
              fprintf(stderr, "errmsg = [%d][%s]\n", errno, strerror(errno));
              return -1;
        }
         
         Recv();
         CloseTcp();
   }
}

int main()
{
   int i;
   CreateLisntenSock();

   for(i = 0; i < 10; i ++)
  {
       if (fork() == 0)
       {
            DoDeal();
            exit(1);
       }
  }

   exit(0);
}



当客户端向服务端发起请求时,服务程序的其中一个进程可以正常处理客户端请求,其他子进程由于"惊群"导致 accept 出错(errno为EAGAIN 或者 ENOTCONN),但理论上 accept 由于 "惊群" 应该会重新进入休眠状态,但在这里且出错, 不知道是不是操作系统的问题,对accept加锁就没问题了。 同样的程序(没有对accept加锁)在SCO上测试 正常,accept 没有出错(虽然存在 "惊群" ) 。





顶部
easysword
LU新生
Rank: 1



UID 99264
精华 0
积分 1
帖子 1
活跃指数 0
LU金币 1 个
LU金条 0 个
阅读权限 10
注册 2007-11-26
 
发表于 2007-11-26 15:36  资料  个人空间  短消息  加为好友 
我在基于2.6内核的slackware系统上也发现同样的问题

顶部
 



当前时区 GMT+8, 现在时间是 2008-9-8 10:40
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.051812 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver