上午听同事讨论关于线程退出的时候是否需要关闭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。
线程与socket句柄
最新推荐文章于 2023-05-24 11:19:47 发布