EPOLL做高并发服务器,接收时出现数据丢失
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <string.h>
#include <strings.h>
#include <errno.h>
#include <sys/epoll.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <netdb.h>
#include <pthread.h>
#include <iostream>
#include <assert.h>
#include <boost/circular_buffer.hpp>
#include <functional>
#include <algorithm>
#include <boost/lexical_cast.hpp>
using namespace std;
#define LISTENQ 5
#define OPEN_MAX 1024
#define SERV_PORT 10000
#define MAX_LINE 1024
#define INFTIM -1
#define MAXEVENTS 1000
boost::circular_buffer<string> cb(500);
boost::circular_buffer<string>::iterator it;//申明一个迭代器it
char buf[1024];
void srv_echo(int clientfd)
{
       bzero(buf,1024);
       int r=recv(clientfd,buf,sizeof(buf),0);
       if(r>0)
       {
          //处理数据
          buf[r]='\0';
          printf("来自客户端的数据:%s\n",buf);
          cb.push_back(buf);
       }else if(r==0){
                //没有可用的数据
          printf("客户退出\n");
          int sum=cb.size();
          for(it=cb.begin();it!=cb.end();it++)
          {
            cout<<*it<<endl;
          }
       }
       else if(r==-1)
       {
          //网络中断
          printf("网络故障\n");
          exit(-1);
       }
}
pthread_t t1,t2;//创建两个线程t1 t2
pthread_mutex_t m;
pthread_cond_t cond;
//线程的回调函数
void *run1(void *s)
{
  pthread_mutex_lock(&m);
  printf("我是线程1\n");
  srv_echo((int)s);
  pthread_mutex_unlock(&m);
}<