简单的并发服务器

来源:互联网 发布:手机联系人数据恢复 编辑:程序博客网 时间:2024/05/01 07:44

                                     简单的并发服务器

UNIX下编写简单的并发服务器最简单的方法就是fork一个子进程来服务每个客户。

pid_t    pid;

int  listenfd, connfd;

listenfd =  socket();

bind(listenfd, );

listen(listenfd, LISTENQ)

for(;  ;)

{

       connfd = accpet(listenfd,   );

       if((pid = fork()) == 0)

       {

               close(listenfd);

               doit(connfd);

               close(connfd);

               exit(0);

       }

       close(connfd);

}

当一个连接建立时,accpet返回,服务器紧跟着调用fork,然后父进程关闭已连接套接字子进程关闭监听套接字。

为什么父进程调用close(connfd)没有终止子进程与客户的连接呢?

这就要理解APUE上讲的fork函数了,每个文件或者套接字都有一个引用计数,引用计数在文件表项中维护。他是当前打开着的引用该文件或套接字描述符的个数。

在本例中,socket函数返回后与listenfd关联的引用计数为1.在accept函数返回后与connfd关联的引用计数也为1.在fork函数返回后与listenfd和connfd关联的引用计数为2.当父进程关闭connfd时只是将他的引用计数从2减为1.该套接字的真正清理和资源释放都是在引用计数减为0的时候进行。

0 0
原创粉丝点击