linux下一对多socket服务器端多线程泄露问题
2024-08-25 11:36:40
线程创建多了,没有释放。导致内存泄露。。。
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);
}
}
}
最新文章
- 把域名绑定到某个项目,以nginx服务器为例
- wordpress(三)wordpress手动更新
- 准备使用 Office 365 中国版--域名
- Nginx限制某个IP同一时间段的访问次数
- 部署 mozilla-BrowserQuest
- 《C陷阱与缺陷》读书笔记
- iOS-OC-基础-NSNumber常用方法
- ebtables使用的协议
- 安装Hadoop及Spark(Ubuntu 16.04)
- 转: web 页面加载速度优化实战-100% 的飞跃提升
- java从网络中下载图片到本地
- css之overflow应用
- django中的一对一、一对多、多对多及ForeignKey()
- 最简单的Spring Security配置示例
- 【Android】android:manageSpaceActivity让应用手动管理应用的数据目录
- 设计模式,Let&#39;s “Go”! (上)
- Angular echarts图表自适应屏幕指令
- C语言:自定义一个查找字串的功能函数,类似于<;string.h>;中的strstr()
- java多线程(一)-五种线程创建方式
- Java常用类归纳(Object、System、Properties、包装类和工具类等等)