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. php 计算当天凌晨时间戳 以及获取其他常用时间戳

    php 计算当日凌晨时间戳 以及获取其他常用时间戳(持续补充中...) 获取当天凌晨时间戳: echo strtotime(date('Y-m-d')); 以下再列举一些获取其他常用时间戳的方法 获取 ...

  2. R-data.table

    data.table可以扩展和增强data.frame的功能,在分组操作和组合时访问速度更快. require(data.table) theDT = data.table(A=1:10, B=let ...

  3. phpmyadmin提示The mbstring extension is missing的解决方法

    解决办法:安装php-mbstring yum install php-mbstring

  4. POJ:1751-Highways(Kruskal和Prim)

    Highways Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 6078 Accepted: 1650 Special Judg ...

  5. Prolog&Epilog

    这篇博客会简单介绍一下Prolog&Epilog 然后再简单介绍下我对于程序在计算机中到底如何运行的一些理解(因为自己之前也从来没有接触过这些方面的知识,所以如果有讲的不对的地方希望大家能够帮 ...

  6. luogu3369 【模板】普通平衡树(Treap/SBT) treap splay

    treap做法,参考hzwer的博客 #include <iostream> #include <cstdlib> #include <cstdio> using ...

  7. JavaScript简单继承

    很多C#或C++开发人员习惯使用继承来开发项目,所以当他们想学习JavaScript语言时,第一个问题一般是:“我怎么在JavaScript中使用继承?”. 实际上JavaScript使用了一种不同于 ...

  8. 关于ios 和 android 录音(语音)对聊文件格式问题

    关于ios 和 android 录音(语音)对聊文件格式问题 在做语音对讲的时候,将会碰到录制语音格式的问题,这些需要跨平台我们可能需要使用双方平台都支持的格式,或者执行编码转换 解决方式如下: wa ...

  9. Matplotlib中文乱码解决办法

    Matplotlib中文乱码 解决方法如下: 首先设置源码文件编码方式为UTF-8 #-*- coding: utf-8 -*- 接着设置字体属性字典 font = {'family': 'SimHe ...

  10. Canvas链式操作

        Canvas 链式操作 canvas有个非常麻烦的地方就是不支持链式操作,导致书写极其繁琐,刚刚学习了canvas的链式操作. 下面是代码 改进之后的写法,犀利得多啊! 1.canvas = ...