zoukankan      html  css  js  c++  java
  • close_socket断开连接的方式

    struct linger

    TCP连接断开的时候调用closesocket函数,有优雅的断开和强制断开两种方式.

    那么如何设置断开连接的方式呢?是通过设置socket描述符一个linger结构体属性。

    linger结构体数据结构如下:

    struct linger

    {

    int l_onoff;

    int l_linger;

    };

    有三种组合方式:

    第一种

    l_onoff = 0;

    l_linger忽略

    这种方式下,就是在closesocket的时候立刻返回,底层会将未发送完的数据发送完成后再释放资源,也就

    是优雅的退出。

    第二种

    l_onoff非零

    l_linger = 0;

    这种方式下,在调用closesocket的时候同样会立刻返回,但不会发送未发送完成的数据,而是通过一个REST包强制的关闭socket描述符,也就是强制的退出。

    第三种

    l_onoff非零

    l_linger > 0

    这种方式下,在调用closesocket的时候不会立刻返回,内核会延迟一段时间,这个时间就由l_linger得值来决定。如果超时时间到达之前,发送完未发送的数据(包括FIN)并得到另一端的确认,closesocket会返回正确,socket描述符优雅性退出。否则,closesocket会直接返回错误值,未发送数据丢失,socket描述符被强制性退出。需要注意的时,如果socket描述符被设置为非堵塞型,则closesocket会直接返回值。

    Linux下需要包含头文件<arpa/inet.h>

    具体用法:

    struct linger ling = {0, 0};

    setsockopt(socketfd, SOL_SOCKET, SO_LINGER, (void*)&ling, sizeof(ling));

    原文

    http://www.cnblogs.com/caosiyang/archive/2012/03/29/2422956.html

  • 相关阅读:
    MFC下使用Mysql
    Curl的移植编译以及注意事项
    MFC 封装类为静态链接库
    MFC 任务托盘显示气泡
    MFC 获取本机IP、网络ip和物理地址
    MFC下获取系统内存和当前进程的内存使用情况
    C++ windows客户端支持SSL双向认证
    jdk+tomcat+mysql一键安装脚本
    mysql修改数据库密码
    MFC 任务托盘经常消失问题
  • 原文地址:https://www.cnblogs.com/mydomain/p/2924299.html
Copyright © 2011-2022 走看看