当前位置:  技术问答>linux和unix

网络编程中,当服务端连接断开时,客户端仍然可以调用send成功

    来源: 互联网  发布时间:2017-02-01

    本文导语:  如题,服务端断开与客户端的连接: shutdown(s, SHUT_RDWR); close(s); 但客户端仍然可以send数据,而且成功(当然只是函数调用成功,数据不可能真正发送出去),我每次send三个字节,有时候可以send十多次,之后返回EPIPE...

如题,服务端断开与客户端的连接:
shutdown(s, SHUT_RDWR);
close(s);

但客户端仍然可以send数据,而且成功(当然只是函数调用成功,数据不可能真正发送出去),我每次send三个字节,有时候可以send十多次,之后返回EPIPE,有时候只能send两三次,之后返回EPIPE

注:客户端是阻塞的、tcp协议

开始我以为是时间问题,故意在连接断开之后,等了许久,结果还是能send十多次。
如果我不停的对s做recv调用,相信很快就能知道服务端断开连接了。
我想问的是,要快速的检测到服务端断开(就说正常断开吧,异常不考虑,那要用心跳包),客户端必须要不停的调用recv吗(就算服务端不会发送任何数据)?这是tcp协议的规定还是linux没有实现好,我记得windows好像没有这个问题。

|
服务端单方shutdown并不表示连接已断开。只表示服务端socket已不可用,并发送了通知给客户端,要求断开。客户端读到-1即认为文件流已结束,调用shutdown发送断开请求给服务端,彻底关闭tcp连接。TCP/IP协议断开部分可以参考 TCP三部曲。。。

|
断开还要4路握手呢...

反正我是没遇到过close之后还检查检查是否关闭成功的,关了就别管了,对端read 0就知道EOF了。

|
貌似客户端的send不能立即检测连接的关闭

不了解具体原因 呵

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • IOS开发之socket网络编程(基于SimpleNetworkStreams的c/s程序)
  • 用java做网络编程和用c做网络编程有啥区别
  • andriod下java socket网络编程:java socket客户端服务端代码示例
  • 嵌入式网络编程与非嵌入式网络编程有什么不同
  • 《UNIX网络编程》这本书适合linux下的网络编程吗?
  • 读过 Unix网络编程 或者 熟知Unix网络编程的 的进来看一下
  • 请问unix网络编程和linux网络有什么区别
  • UNIX网络编程卷1
  • 高分求网络编程方面的书籍
  • 求助:linux/unix网络编程
  • 新手请教,linux网络编程。
  • linux环境进行网络编程的教材
  • Unix/Linux网络编程怎样来做一个项目?
  • 关于文件操作和Socket网络编程!
  • linux下网络编程环境配置问题
  • java的网络编程
  • 网络编程中“多宿”是什么意思
  • 谁知道哪有《Unix网络编程》w.richard stevens 著的下载?
  • 菜鸟问题:请问要在Linux操作系统下完成TCP/IP网络编程,用什么编程工具好?
  • 请推荐几本Linux/Unix网络编程的好书吧
  • 求介绍linux下的网络编程书


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3