+ -
当前位置:首页 → 问答吧 → 一个程序为什么会被执行2次?

一个程序为什么会被执行2次?

时间:2010-07-26

来源:互联网

  1. int main()
  2. {
  3.        ...前面的省略..
  4.         if(pthread_create(&tid,&attr,(void *)socket_,arg))
  5.          {
  6.                   perror("error socket_");
  7.          }
  8. }

  9. void socket_(struct ARG *arg)
  10. {
  11.         int listenfd,connectfd;
  12.         struct sockaddr_in server;
  13.         struct sockaddr_in client;
  14.         socklen_t addrlen;
  15.         char buf[MAXDATASIZE];

  16.         printf("建立socket\n");
  17.         epfd = epoll_create(MAXFDS);

  18.          if((listenfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
  19.          {
  20.                 perror("socket() error.");
  21.                 //exit(1);
  22.          }

  23.          int opt = 1;
  24.          setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));

  25.          bzero(&server, sizeof(server));
  26.          server.sin_family = AF_INET;
  27.          server.sin_port = htons(PORT);
  28.          server.sin_addr.s_addr = htonl(INADDR_ANY);
  29.          if(bind(listenfd, (struct sockaddr *)&server, sizeof(server)) == -1)
  30.          {
  31.                   perror("bind() error.");
  32.                   //exit(1);
  33.          }

  34.          if(listen(listenfd, BACKLOG) == -1)
  35.          {
  36.                   perror("listen() error.");
  37.                   //exit(1);
  38.          }

  39.          addrlen = sizeof(client);

  40.          printf("主程序进入守护状态\n");
  41.         //守候端口有接入立即触发
  42.          while(1)
  43.          {
  44.                  connectfd=accept(listenfd, (struct sockaddr *)&client, &addrlen );
  45.                  if(connectfd== -1)
  46.                  {
  47.                                 if (errno == EINTR)
  48.                                                 continue;
  49.                                 usleep(1000000);
  50.                             perror("accept() error.");
  51.                           //exit(1);
  52.                  }else if(connectfd>=0){
  53.                         arg->currently=connectfd;
  54.                         printf("加入一个新的接口\n");
  55.                         acceptfz(arg,connectfd,1);//向socket注册句柄
  56.                  }else{
  57.                         printf("此接口出现了些问题,不做处理\n");
  58.                  }
  59.          }
  60. }
复制代码
显示
建立socket
主程序进入守护状态
建立socket
主程序进入守护状态
==================
说明这个程序被执行了2次? 郁闷啊 高手帮忙解答一下

作者: jd808   发布时间: 2010-07-26

这些代码看不出来,你把代码精简下试试,应该是别的地方引起的

作者: hellioncu   发布时间: 2010-07-26

相关阅读 更多