multi_io 一连接一线程

每连接一个客户端,就创建一个线程
所谓c10k问题,指的是:服务器如何支持10k个并发连接,也就是concurrent 10000 connection(这也是c10k这个名字的由来)。

//函数类型 * client_thread 
//int clientfd=*(int*)arg
void *client_thread(void * arg){
      int clientfd=*(int*)arg;
      while(1){
           char buffer[128];
           int count=recv(clientfd,buffer,128,0);
           if(count==0) break;
           send(clientfd,buffer,count,0);
           printf("buffer=%s",buffer);
      }
      close(clientfd);
}

int main()
{
    int sockfd=socket(AF_INET,SOCK_STREAM,0);

    struct sockaddr_in serveraddr;
    memset(&serveraddr,0,sizeof(struct sockaddr));

    serveraddr.sin_family=AF_INET;
    serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
    serveraddr.sin_port=htons(2048);

    if(-1==bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(struct sockaddr))){
         perror("bind");
         return -1;    
    }
    
    listen(sockfd,10);

    while(1){
         struct sockaddr_in clientaddr;
         socklen_t len=sizeof(clientaddr);
         int clientfd=accept(sockfd,(struct sockaddr*)&clientaddr,&len);
         printf("accept");

        pthread thid;
        pthread_create(&thid,NULL,client_thread,&clientfd);
    }

    getchar();

}
posted @ 2025-01-03 20:02  流光最璀璨i  阅读(10)  评论(0编辑  收藏  举报