+ -
当前位置:首页 → 问答吧 → 一个socket的问题

一个socket的问题

时间:2011-12-07

来源:互联网

基于tcp,一个socket连接已经被keep-alive杀掉了。

这个时候再调用Shutdown跟Close会有什么问题吗???????????

作者: rere8899   发布时间: 2011-12-07

或者keep-alive是自动关闭tcp连接,还是将错误返回给应用程序让自己来关闭连接???

作者: rere8899   发布时间: 2011-12-07

你怎知道已经杀掉了?如果是“偶尔”,那么你的代码如何基于“偶尔” 来编程?你总要确保100%运行正确吧。

作者: sp1234   发布时间: 2011-12-07

你就写出一个代码,让我看看——用你的代码——你是如何知道“被杀掉了”。如果不能,那么你自然要正规地shutdown或者至少要close。

作者: sp1234   发布时间: 2011-12-07

引用 2 楼 sp1234 的回复:

你怎知道已经杀掉了?如果是“偶尔”,那么你的代码如何基于“偶尔” 来编程?你总要确保100%运行正确吧。


  C#的socket有提供保活机制的,SetSocketOption里面设置的。问题是客户端突然异常掉线了,没有发FIN过来。服务端的TCP就不知道客户已经断开。所以它用保活定时探测。
  然后tcp探测到该客户连接已经断开,释放掉该连接。
  我的问题是,tcp属于内核层,他释放掉了连接跟tcb,但是在应用层如果连接释放了,还要很多东西需要处理比如资源释放。也就是怎么通知倒应用层的???

 我不知道你说的偶尔是什么意思。

作者: rere8899   发布时间: 2011-12-15

不会,只要socket对象没有被销毁掉,就可以调用那两个方法关闭

作者: Carpathia   发布时间: 2011-12-15