zoukankan      html  css  js  c++  java
  • tcp异常断开的重连解决方法

    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数据。

  • 相关阅读:
    将博客搬至CSDN
    NOIP2018酱油记
    CF 1039D You Are Given a Tree && CF1059E Split the Tree 的贪心解法
    最大异或子序列问题
    UVa 10615
    UVa 1057
    用树状数组代替平衡树
    [CTSC2008]图腾totem
    POI2008 题解
    简便思路的题目别人的做法
  • 原文地址:https://www.cnblogs.com/cj2014/p/4593609.html
Copyright © 2011-2022 走看看