2012-03-09 52 views
2

我用c-unix语言创建了一个多进程客户端服务器。 与客户端的每个连接均作为子进程进行管理。 当发生错误时,我只需调用函数出口(EXIT_FAILURE),因为我读到此函数关闭所有打开的流。 问题是:我必须关闭客户端套接字描述符还是关闭是自动的?套接字描述符是否由函数exit(退出代码)关闭?

我的代码的一个例子是:

while(1){ 
    if((client_sock=accept(ds_sock,&client,&s_client))==-1){ 
     printf("Accept error\n"); 
     exit(EXIT_FAILURE); 
    } 
    if(fork()==0){ //child 
     if((close(ds_sock)==-1)){ 
      printf("Closing error\n"); 
      exit(EXIT_FAILURE); 
     } 
     if((read(client_sock,&up,sizeof(userpass)))==-1){ 
      printf("Error read\n"); 
      exit(EXIT_FAILURE); //Does this instruction close the client_sock too? 
     } 

回答

2

你必须关闭套接字父进程的描述符后叉复制。如您已经怀疑的那样,调用exit()将自动关闭子进程中的套接字。

操作系统在完成时必须释放进程的所有资源,否则系统资源将被写入不良的程序耗尽。

相关问题