并发服务器编程模型

在并发服务器编程模型中,最简单的就是父进程监听外来连接请求,一旦请求到来,父进程fork()子进程处理连接,与外来客户端进行交互

此时通用的做法是:父进程copy自己的地址空间给子进程,此时子进程拥有与父进程相同的打开的文件描述符!即,父子进程都有一个监听套接字、一个连接套接字。连接建立后,父进程关闭连接套接字,子进程关闭监听套接字。

我们知道,调用close()关闭套接字会导致tcp发送FIN分节


但是为什么父子进程关闭这两个套接字没有导致连接的断开?

其实,在每个文件描述符或者套接字都有一个引用计数机制。只有当它的引用计数变为0的时候才会真正清理和释放该套接字的资源。

还有一个问题就是,如果父进程从来都不关闭连接套接字那会怎么办?

由于任何进程在任何时刻可拥有的打开着的描述符数量通常是有限制的。如果父进程不关闭连接套接字会导致套接字资源的耗尽,而且,没有一个客户连接会被终止。因为这些连接套接字的引用计数值永远是1,不可能为0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值