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);
}
}
}
linux下一对多socket服务器端多线程泄露问题的更多相关文章
- Linux下的C Socket编程 -- server端的继续研究
Linux下的C Socket编程(四) 延长server的生命周期 在前面的一个个例子中,server在处理完一个连接后便会立即结束掉自己,然而这种server并不科学啊,server应该是能够一直 ...
- Linux下的C Socket编程 -- server端的简单示例
Linux下的C Socket编程(三) server端的简单示例 经过前面的client端的学习,我们已经知道了如何创建socket,所以接下来就是去绑定他到具体的一个端口上面去. 绑定socket ...
- Linux下的C Socket编程 -- 获取对方IP地址
Linux下的C Socket编程(二) 获取域名对应的IP地址 经过上面的讨论,如果我们想要连接到远程的服务器,我们需要知道对方的IP地址,系统函数gethostbyname便能够实现这个目的.它能 ...
- Linux下的C Socket编程 -- 简介与client端的处理
Linux下的C Socket编程(一) 介绍 Socket是进程间通信的方式之一,是进程间的通信.这里说的进程并不一定是在同一台机器上也有可能是通过网络连接的不同机器上.只要他们之间建立起了sock ...
- Linux下高并发socket链接数测试
一.如何增大service进程的max open files ulimit -n 只能改小max open files,不能改大.需要按照以下步骤: 修改/etc/security/limits.co ...
- Linux下简单的socket通信实例
Linux下简单的socket通信实例 If you spend too much time thinking about a thing, you’ll never get it done. —Br ...
- linux下C语言socket网络编程简例
原创文章,转载请注明转载字样和出处,谢谢! 这里给出在linux下的简单socket网络编程的实例,使用tcp协议进行通信,服务端进行监听,在收到client的连接后,发送数据给client:clie ...
- Linux下高并发socket最大连接数所受的各种限制(详解)
1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每 ...
- linux下close 掉socket 之后 阻塞的recv 不会立即返回
转载自:http://www.cnblogs.com/wainiwann/p/3942203.html 在开发的一个基于rtmp聊天的程序时发现了一个很奇怪的现象. 在windows下当我们执行 cl ...
随机推荐
- 在Eclipse上建立hadoop2.2.0/hadoop2.4.0源代码阅读环境
1.安装依赖的包: yum install gcc-c++ g++ autoconf automake libtool cmake zlib1g-dev pkg-config libssl-dev 2 ...
- html a 链接标签title属性换行鼠标悬停提示内容的换行效果
鼠标经过悬停于对象时提示内容(title属性内容)换行排版方法,html title 换行方法总结. html的title属性默认是显示一行的.如何换行呢? 这里DIVCSS5总结介绍两种换行方法为大 ...
- android 总结(样式)—跑马灯 button的点击效果 RadioGroup 实现滑动的效果 button 下面有阴影 卡片样式
<Button android:layout_width="wrap_content" android:layout_height="wrap_content&qu ...
- 在MacOX下安装python-opencv
下载好opencv之后 1. 在文件夹下新建一个release或build的文件夹: 2. cmake . make 3.在该build文件夹下 nano .bash_profile 把python的 ...
- 关于设置border的小技巧
可以在需要的时候,在某个元素下面放一个长或宽为1px,或者你需要的border宽度的 div ,再在这个div 上设置border.按需要调整这个div的位置.
- xcode armv6 armv7 armv7s arm64
目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...
- js 轮播图代码
js代码 (function(){ /** parent //父容器 changeTime //每次间隔几秒切换下一条 leaveTime //鼠标从小图上离开过后几秒继续切换 index //从第几 ...
- Lua协程
协作例程 1.同一时刻仅一个例程在运行 2.执行权让渡和恢复[栈]
- day11_API第一天
1.Eclipse常用操作 1:安装 A:解压 B:复制到指定的目录(不要有中文,和其他非法字符) 2:使用 A:打开软件的界面 B:新建一个项目(工程) C:在 ...
- 网页闯关游戏(riddle webgame)--SQL注入的潘多拉魔盒
前言: 之前编写了一个网页闯关游戏(类似Riddle Game), 除了希望大家能够体验一下我的游戏外. 也愿意分享编写这个网页游戏过程中, 学到的一些知识. web开发初学者往往会忽视一些常见的漏洞 ...