利用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
  • 1415

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

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

网络通信模型 --select

本文涉及到线程 / 时间图例,只为表明线程在各个 IO 上确实存在阻塞时延,但并不保证时延比例的正确性和 IO 执行先后的正确性;另外,本文所提及到的接口也只是笔者熟悉的 Unix/Linux 接口,...

通用通信模型的TCP服务端实现完善

上一篇中的实现没有利用好通信工厂和

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

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

基于TCP协议的通信模型

服务器端 (1)创建socket,使用socket函数 (2)准备通信地址,使用结构体类型 (3)绑定socket和通信地址,使用bind函数 (4)进行监听,使用listen函数 (5)响...

如何利用内存池和共享内存构建高速的进程间通信模型

利用内存池和共享内存构建一个高速的进程间通信模型
  • D_Guco
  • D_Guco
  • 2017年06月25日 12:36
  • 871

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

【前言】针对TCP底层网络通信设计时,当在接收或者发送数据消息时,都需要考虑TCP粘包或者拆包的问题。即可以认为TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分,因...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用tcp通信与select混用的通信模型中一方终止引发另一方死循环的解决方案
举报原因:
原因补充:

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