linux下一对多socket服务器端多线程泄露问题

线程创建多了,没有释放。导致内存泄露。。。

int main()
{
	 int len;
	int on=1;  
	// pMachList = CreateEmptyLinklist();
	
	 DataBaseInit(); 

	 ReadAdjust();
	 int *temp;
	 socketSrv=socket(AF_INET,SOCK_STREAM,0); 
	 
	 addrSrv.sin_family=AF_INET;
	 addrSrv.sin_port=htons(8000);
	 addrSrv.sin_addr.s_addr=htonl(INADDR_ANY);
	 memset(addrSrv.sin_zero,0,8);
	 
	if((setsockopt(socketSrv,SOL_SOCKET,SO_REUSEADDR,&on,sizeof(on)))<0)  
	  {  
		perror("setsockopt failed");  
		exit(EXIT_FAILURE);  
	   }  
	 if(bind(socketSrv,(struct sockaddr*)&addrSrv,sizeof(addrSrv))<0) 
		 perror("bind");
	 listen(socketSrv,100);
	 len=sizeof(addrClt);
	 while(1)
	 {
		  pthread_t pid;
		  temp=(int *)malloc(sizeof(int));
		  *temp= accept(socketSrv,(struct sockaddr*)&addrClt,(socklen_t*)(&len));	
		   printf("accept socket= %d\n",*temp);  

		  if(-1==*temp){  
               printf("accept error \n");  
               continue;  
          }  
int err; err=pthread_create(&pid,NULL,(void *)f1,temp);//一个线程处理一个客户端 if (err != 0) printf("can't create thread: %s\n", strerror(err)); } close(socketSrv); return 0; }

 在线程中加入: pthread_detach(pthread_self());

线程结束的时候自动销毁。。。

void f1(int *socketCtl2)//利用pthread_create把参数传进来
{
     unsigned char buf[1024];
      int len,i;
      memset(buf,0,1024);
      struct   FileRecord temFile;
     unsigned  short CalCRC;
     pthread_detach(pthread_self());
     while(1)
      { 
            len=recv(*socketCtl2,buf,1024,0);
    // printf("recv len : %d\n",len);
        if(len<=0)
        { 
           printf("recv error len=%d\n",len);
          deleteMachNode(*socketCtl2);
          close(*socketCtl2);
          free(socketCtl2);
          pthread_exit(NULL);
        } 
    }
}

 

转载于:https://www.cnblogs.com/sankye/p/5056503.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值