线程与socket句柄

上午听同事讨论关于线程退出的时候是否需要关闭socket句柄的问题,之前都是在讨论进程退出时,进程会释放所占有的所有资源,当然也包括socket 句柄资源,关于这点相信大部分人也相当的清楚。 关于线程退出时,socket句柄是否也会自动的关闭,我个人认为线程不会自动关闭socket句柄在线程退出时,因为线程是公用进程的资源,进程会自动释放资源很显然线程就不太可能释放资源。为此我个人做了一个简单的测试: #include #include #include void *threadfunc(void* arg) { int nfd = socket(AF_INET, SOCK_STREAM, 0); printf("fd=%d time=%d/n",nfd,time(NULL)); close(nfd); } int main() { pthread_t thid; pthread_create(&thid,NULL,&threadfunc,NULL);1) sleep(3); printf("ddd/n"); pthread_create(&thid,NULL,&threadfunc,NULL);2) sleep(3); return 0; } 在这里,线程退出时,线程显示的将socket关闭。1号线程获取到的socket句柄为3(0,1,2前三个句柄默认的保留为输入、输出、错误输出),2号线程获取的socket据也为3;、 #include #include #include void *threadfunc(void* arg) { int nfd = socket(AF_INET, SOCK_STREAM, 0); printf("fd=%d time=%d/n",nfd,time(NULL)); } int main() { pthread_t thid; pthread_create(&thid,NULL,&threadfunc,NULL);3) sleep(3); printf("ddd/n"); pthread_create(&thid,NULL,&threadfunc,NULL);4) sleep(3); return 0; } 这段代码与上面的不同之处在于,在线程退出时,没有关闭打开的socket句柄,输出的结果为:3、4。 为此,我们可以可以总结出,在线程退出时,线程并没有自动关闭线程中的socket句柄。所以才会出现输出结构为3、4。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值