1.select超时重连

http://bbs.chinaunix.net/thread-4162149-1-1.html

2.http://bbs.csdn.net/topics/350074818

心跳包

recv = -1

WSAGetLastError //windows

3.http://blog.csdn.net/chenggong2dm/article/details/9158857

tcp_keepalive

4.http://zhidao.baidu.com/link?url=VoakzKE5hAvQ1q4Q5YvXUIZIyIyr1hQLmfDKGL5O7yMUdWQczvHkTBE1934dMyLcdrdZHD0X0Y6fzyrLO1u1m0lDsNEIcTM2aRdDqhUGA_q

百度知道:发送接收和kepalive

5.http://biancheng.dnbcw.info/linux/366100.html

6.http://blog.csdn.net/greatsong/article/details/4987242

7.http://www.cnblogs.com/lidabo/p/4093733.html

8.http://blog.csdn.net/wtewrw/article/details/6547380

select 1,read 0 则断开

9.http://blog.csdn.net/god2469/article/details/8801356

多种方法总结

10.Windows和Linux下socket的区别 http://www.cnblogs.com/live41/archive/2012/08/29/2661942.html

11.win32/linux下网络编程十点需要注意的地方(转) http://blog.sina.com.cn/s/blog_4b383bff010007ow.html

12. linux 客户端 Socket 非阻塞connect getsockopt不可用 http://blog.csdn.net/taolinke/article/details/6680986

一 使用select函数的返回值判断(适用于在一定时间段内肯定有数据交互的场合)

#include <sys/select.h>

int select (int maxfd + 1,    fd_set *readset,    fd_set *writeset,    fd_set *exceptset,    const struct timeval * timeout);
       最大的文件描述符加1,  检查可读性,      检查可写性  检查带外数据
       一个指向timeval结构的指针,用于决定select等待I/o的最长时间。如果为空将一直等待。
             timeval结构的定义:struct timeval {
                             long tv_sec; // seconds
                          long tv_usec; // microseconds
                         }
返回值      >0:就绪描述字的正数目
                  -1:出错
                   0:超时
 

1、recv和send函数提供了和read和write差不多的功能。但是他们提供了第四个参数来控制读写操作.

int recv(int sockfd,void *buf,int len,int flags)

int send(int sockfd,void *buf,int len,int flags)

前面的三个参数和read,write相同,第四个参数能够是0或是以下的组合:

_______________________________________________________________

| MSG_DONTROUTE | 不查找路由表 |

| MSG_OOB | 接受或发送带外数据 |

| MSG_PEEK | 查看数据,并不从系统缓冲区移走数据 |

| MSG_WAITALL | 等待任何数据 |

|————————————————————–|

如果flags为0,则和read,write一样的操作。

2.recv/send函数需要调用read/write函数.

3.在unix中,所有的设备都可以看成是一个文件,所以我们可以用read来读取socket数据。

tcp异常断开的重连解决方法的更多相关文章

  1. socket选项自带的TCP异常断开检测

    TCP异常断开是指在突然断电,直接拔网线等等情况下,如果通信双方没有进行数据发送通信等处理的时候,无法获知连接已经断开的情况. 在通常的情况下,为了使得socket通信不受操作系统的限制,需要自己在应 ...

  2. VS调试异常代码 HRESULT:0x80070057 (E_INVALIDARG)解决方法

    我目前在做的一个系统是VS2010写的的B/S架构程序, 主要技术是:C#.SQLSERVER2008.NHibernate,Python,Nhibernate 的*.hbn.xml是映射数据库的表结 ...

  3. 关于找不到指定的模块,异常来自HRESULT:0x8007007E的解决方法

    上午从公司前辈那里拷贝到的ASP.NET代码,在自己机器上部署的时候发现问题,直接报错,找不到指定的模块,异常来自HRESULT:0x8007007E.并且一大堆警告. 在网上百度很多解决方法,归纳如 ...

  4. 解决Win7 软件图标不显示--Win7图标异常,快捷方式不显示解决方法

    电脑症状:WIN7的系统,桌面上的图标显示的不正常,快捷方式显示的是未知程序.看不到程序默认图标,快捷方式图标不显示. 解决方法:删除程序图标缓存即可.   将下面的内容复制到记事本保存为“Repai ...

  5. 避免docker异常重启容器挂掉的解决方法

    Docker 升级或者重启容器不会被停掉然后重启的解决方法 在/etc/systemd/system/multi-user.target.wants/docker.service文件下添加配置 注意: ...

  6. eclipse 导入android 项目重名解决方法

    在进行andoid 开发时会用到许多的开源框架,但有时候发现几天框架的项目名字都是 library. 解决方法: 1.如果项目中没有 .project 文件,直接修改项目文件夹的名字即可,注意在你引用 ...

  7. python tcp黏包和struct模块解决方法,大文件传输方法及MD5校验

    一.TCP协议 粘包现象 和解决方案 黏包现象让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd)执行远程命令的模块 需要用到模块subprocess sub ...

  8. TCP粘包,拆包及解决方法

    在进行Java NIO学习时,发现,如果客户端连续不断的向服务端发送数据包时,服务端接收的数据会出现两个数据包粘在一起的情况,这就是TCP协议中经常会遇到的粘包以及拆包的问题.我们都知道TCP属于传输 ...

  9. lucene 异常 Lock obtain timed out 解决方法

    http://terje.blog.163.com/blog/static/119243712008102122316595/     一般都是索引建立的过程中,不正常操作影响了IndexWriter ...

随机推荐

  1. Python开发环境与开发软件的安装

    Python开发的必要因素: 开发软件:PyCharm 社区版 PyCharm安装过程: 首先去官网下载:(链接为:  https://www.jetbrains.com/pycharm/downlo ...

  2. Linux学习-检验软件正确性

    md5sum / sha1sum / sha256sum 目前有多种机制可以计算文件的指纹码,我们选择使用较为广泛的 MD5, SHA1 或 SHA256 加密机 制来处理,我们拿NTP 软件来检查看 ...

  3. [转载]C语言头文件的作用

    最近在工作当中遇到了一点小问题,关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题.学 习C语言已经有好几年了,工作使用也近半年了,但是对于这部分的东西的确还没有深入的思考过.概念上还是 ...

  4. CodeForces 500E New Year Domino

    题意: 从左到右排列着\(n\)个多米诺骨牌,它们分别站在\(x\)轴上的位置\(p_i\)上且高度为\(l_i\). 当第\(i\)个多米诺骨牌向右倒下时,如果\(p_i < p_j \leq ...

  5. POJ 3241 曼哈顿距离最小生成树 Object Clustering

    先上几个资料: 百度文库有详细的分析和证明 cxlove的博客 TopCoder Algorithm Tutorials #include <cstdio> #include <cs ...

  6. 更改activity切换方式

    overridePendingTransition(enterAnim, exitAnim); Intent intent =new Intent(this,item2.class); startAc ...

  7. web前端开发小结

    1.浏览器内核 IE-----Trident Edge-----EdgeHTML Firefox-----Gecko Safari-----Webkit Chrome-----Blink(Webkit ...

  8. Could not load file or assembly 'AjaxControlToolkit' or one of its dependencies

    Could not load file or assembly 'AjaxControlToolkit' or one of its dependencies. API 调用退出异常. (Except ...

  9. configparser模块——用于生成和修改常见配置文档

    配置文档格式 [DEFAULT] ServerAliveInterval = 45 Compression = yes CompressionLevel = 9 ForwardX11 = yes [b ...

  10. [git 学习篇] git文件版本回退再学习

    需求;  准备把readme.txt回退到上一个版本,也就是“add distributed”的那个版本 首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交3 ...