linux socket 中判断对方关闭的两种方式

在TCP中,我是服务器,对方是客户端,对方挂掉了,我怎么能够知道呢?

UNP中说的FIN,RST对于应用层来讲,是不可见的……

我跟客户端的联系只是通过read,write嘛。

socket又不会自动给我信号啥的。

 

当对方挂掉了之后呢

如果对方正常关闭的,应该发一个FIN过来。

我这边的select到一个可读,然后读返回0.

如果对方不正常挂掉了,应该发一个RST过来。

我这边select表示可写。

然后写第一次,引发一个RST,写第二次,引发一个SIGPIPE。

这个SIGPIPE默认动作是干掉进程。

因此我们处理掉这个信号。

 

那么,第一次触发RST的write出去的数据就丢掉了,找不回来了。

这个~~我还没有想出来怎么办……。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值