+ -
当前位置:首页 → 问答吧 → 关于tcp服务器无法连接的问题

关于tcp服务器无法连接的问题

时间:2010-09-06

来源:互联网

写了一个TCP服务器程序 同时在线一般为400个客户左右
工作大约2个星期后 就会出现客户无法连接的情况,而且越来越严重,程序并没有崩溃。

我应该从什么地方来查找问题呢?

作者: usbzip   发布时间: 2010-09-06

从服务端查,看accept是否正常

作者: hellioncu   发布时间: 2010-09-06

接收部分的代码 不知道哪里会出现问题
while(1)
  {
    enums = epoll_wait(epollfd, events, listenq, 20);
    if (enums == -1)
    {
        printf("errno=%d,%s\r\n",errno,strerror(errno));
        if(errno==EINTR)
        {
            continue;
        }
        perror("epoll_wait");
    }
    else if(enums==0)
    {
        continue;
    }
    for (n = 0; n < enums; ++n) {
      listen_index=events[n].data.u32;
      if (events[n].data.fd == LGWTCPSock) {
        Newfd = accept(LGWTCPSock, (struct sockaddr *) &TheirAddr,&len);
        if (Newfd < 0) {
          perror("accept");
          continue;
        }
        else
        {
          //printf("recv from: %s:%d,  socket:%d enmus:%d\n", inet_ntoa(TheirAddr.sin_addr), ntohs(TheirAddr.sin_port), Newfd,enums);
        }
        setnonblocking(Newfd);
        ev.events = EPOLLIN | EPOLLET;
        ev.data.fd = Newfd;
        if (epoll_ctl(epollfd, EPOLL_CTL_ADD, Newfd, &ev) < 0) {
          fprintf(stderr, " socket '%d' add epoll error! %s\n",Newfd, strerror(errno));
          return -1;
        }
      }
      else if(events[n].events & EPOLLIN)
      {
        for(j=0;j<MAXTHREAD;j++)
        {
          if(0==s_thread_para[j][0]) break;
        }
        if(j>MAXTHREAD)
        {
          LOG4CPLUS_INFO(log.GetLogInstance(),"thread pool is full!\n");
          close(Newfd);
          continue;
        }
        pthread_mutex_lock(&mutex);
        s_thread_para[j][0]=1;
        s_thread_para[j][1]=events[n].data.fd;
        pthread_mutex_unlock(&mutex);
        pthread_mutex_unlock(s_mutex+j);
      }
    }
  }

作者: usbzip   发布时间: 2010-09-06

相关阅读 更多