用shutdown和close分别关闭套机字的区别

       在TCP连接拆除时,或者当一个进程不再使用该套接字时,要关闭套接字。有两种方式关闭套接字shutdown和close函数。这里介绍下它们的区别。

       先说一下close函数。使用close函数并不一定真的关闭了套接字,因为套接字是使用引用计数的。当一个父进程创建了子进程,父进程中的套接字和子进程的套接字是共享的,只是套接字的引用计数增加了。当用close关闭父进程中的套接字时,只是将该套接字的引用计数减一,并不是真正的关闭该套接字,必须直到引用计数为0,即使用该套接字的所有进程都关闭了该套接字时,套接字才会真的关闭。

       使用shutdown函数可有关闭连接的读或者写操作。因为TCP连接是全双工的,所以使用shutdown函数可以实现半关闭。函数原型:

#include <sys/socker.h>

int shutdown(int s, int how);

how:   SHUT_RD  关闭连接的接收端,不能再接收数据 
       SHUT_WR  关闭连接的发送端,不能再发送数据 
       SHUT_RDWR  两端都关闭 


将how设置为SHUT_RDWR时来调用shutdown,实际上也没有关闭套接字,即比没有释放套接字及其资源。同时,调用shutdown会影响所有打开了该套接字的进程,这是与close的区别。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值