利用tcp通信与select混用的通信模型中一方终止引发另一方死循环的解决方案

原创 2016年08月29日 21:10:45

当在调试服务与客户端程序时 ,发现这样一个非常奇怪的现象,即当我服务器与客户端正常运行时,没什么异常,但一旦一方异常退出(Ctrl + c )时引发另一方死循环。

这个是因为一方的异常退出造成另一方的监听下读函数返回值为0 ,那么由于select监听的特殊性, 所以如果这个东西套接字一方关闭,在进行监听,那么只会造成select无法识别是否有数据 , 进而造成死循环。

解决办法就是不让select继续监听,但是这个实际做起来还是没什么意义,所以可以之间将套接字关掉 , 如果是客户端发现服务端异常退出,可以将被监听的套接字重新赋一个值,一般为0 ,如果是服务端发现客户端异常退出,可以直接删掉,不让select监听。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

TCP通信中一方关闭socket,另一方被强制退出(SIGPIPE)

参考博客:1、参考链接
  • Sun6gm
  • Sun6gm
  • 2014-09-17 21:43
  • 1305

FreeSWITCH技巧:如何向通话的另一方号码发送dtmf?

在实际的应用中,经常有这样的需求,比如一个号码拨打外线,需要送dtmf出去(如拨打10086,根据提示按1按2等),在这种情况下,FreeSWITCH如果处理呢?
  • jizha
  • jizha
  • 2013-11-24 21:17
  • 1787

socket编程 -- 基于TCP协议的C/S通信模型及实现

基于TCP协议的客户端/服务器的程序下图是基于TCP协议的客户端/服务器程序的一般流程服务器调用socket()、bind()、listen()完成初始化后,调用accept()阻塞等待,处于监听端口...

SVN Update Commit Cleanup 报错 陷入死循环解决方案

SVN Update Commit Cleanup 报错 陷入死循环

网络通信框架Netty的TCP粘包/拆包解决方案

【前言】针对TCP底层网络通信设计时,当在接收或者发送数据消息时,都需要考虑TCP粘包或者拆包的问题。即可以认为TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,因...

关于json-lib 和hibernate一起使用的时候出现死循环的解决办法

在我们使用json-lib和hibernate开发的时候,一开始的时候会遇到转换json数组的是出现死循环问题,下面就把我的经历记录一下,可能帮助到大家。 我的实体是这样的,用户和群两个实体(他们之间...

hibernate在做一对多关联时,保存一方的对象,报出不能插入外键的错误的解决方法

写这篇文章将自己的解决方法保存,好记性,不如烂博客,哈哈。我写了两个类Teacher、Student,其中Teacher是一方,Student是多方,它们的关系通过在student的表中的外键Tech...

客户端—服务器通信模型浅析

客户端—服务器(Client-Server)是我们平时最常见的通信方式,本文就对这一通信模型做个简单介绍。 (一)TCP连接方式:短连接方式?长连接方式 目前,多数的客户端—服务器选择TCP做为传输层...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)