`
luckyclouds
  • 浏览: 111447 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于SO_LINGER的使用说明

阅读更多
SO_LINGER

   此选项指定函数close对面向连接的协议如何操作(如TCP)。缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数据发送给对方。


SO_LINGER选项用来改变此缺省设置。使用如下结构:

struct linger {

     int l_onoff; /* 0 = off, nozero = on */

     int l_linger; /* linger time */

};


有下列三种情况:

l_onoff为0,则该选项关闭,l_linger的值被忽略,等于缺省情况,close立即返回;

l_onoff为非0,l_linger为0,则套接口关闭时TCP夭折连接,TCP将丢弃保留在套接口发送缓冲区中的任何数据并发送一个RST给对方,而不是通常的四分组终止序列,这避免了TIME_WAIT状态;

l_onoff 为非0,l_linger为非0,当套接口关闭时内核将拖延一段时间(由l_linger决定)。如果套接口缓冲区中仍残留数据,进程将处于睡眠状态,直 到(a)所有数据发送完且被对方确认,之后进行正常的终止序列(描述字访问计数为0)或(b)延迟时间到。此种情况下,应用程序检查close的返回值是非常重要的,如果在数据发送完并被确认前时间到,close将返回EWOULDBLOCK错误且套接口发送缓冲区中的任何数据都丢失。close的成功返回仅告诉我们发送的数据(和FIN)已由对方TCP确认,它并不能告诉我们对方应用进程是否已读了数据。如果套接口设为非阻塞的,它将不等待close完 成。


l_linger的单位依赖于实现,4.4BSD假设其单位是时钟滴答(百分之一秒),但Posix.1g规定单位为秒。


转自:http://hi.baidu.com/%CF%B8%C6%B7%B3%C1%CF%E3/blog/item/db24882f0843293c1f3089cf.html
分享到:
评论

相关推荐

    setsockopt

    为了控制这种情况,可以使用 `SO_LINGER` 选项: ```c struct linger { u_short l_onoff; // 如果非零,则等待数据发送完毕再关闭套接字 u_short l_linger; // 等待的秒数 }; struct linger m_sLinger; m_...

    setsockopt函数使用说明

    例如,`SO_REUSEADDR`用于允许立即重用套接字地址,`SO_LINGER`用于控制断开连接时的行为,`TCP_NODELAY`用于禁用Nagle算法等。 4. `optval`: 指向选项值的指针,根据`optname`的不同,可能是一个整数、结构体或其他...

    socket选项说明

    - **SO_LINGER**:控制Socket关闭行为,特别是决定是否立即释放资源或等待所有已发送数据被接收完毕。 - **SO_BROADCAST**:允许Socket向广播地址发送数据。 - **SO_OOBINLINE**:控制带外数据的处理方式。 - **SO_...

    ZLMediaKit-Windows-Release(免编译双击exe文件即可启动)

    压缩包内的“流媒体服务”文件可能是一个示例或者说明文档,用于指导用户如何在ZLMediaKit上创建和管理流媒体服务,包括添加、删除和管理流,以及设置流的访问权限等。 总的来说,"ZLMediaKit-Windows-Release...

    Windows Sockets网络编程 可能是最清晰版本(Windows Sockets 2规范解释小组负责人亲自执笔。)总共4个包,part1

    9.2.9 SO_LINGER 9.2.10 SO_OOBINLINE 9.2.11 SO_RCVBUF与SO_SNDBUF 9.2.12 SO_REUSEADDR 9.2.13 SO_TYPE 9.2.14 TCP_NODELAY 9.2.15 不支持的选项 9.2.16 未来会使用的选项 9.3 阻塞钩子 9.3.1 WSASetBlockingHook ...

    Windows Sockets网络编程 总计4个包,part2

    9.2.9 SO_LINGER 9.2.10 SO_OOBINLINE 9.2.11 SO_RCVBUF与SO_SNDBUF 9.2.12 SO_REUSEADDR 9.2.13 SO_TYPE 9.2.14 TCP_NODELAY 9.2.15 不支持的选项 9.2.16 未来会使用的选项 9.3 阻塞钩子 9.3.1 WSASetBlockingHook ...

    Apache Tomcat8优化说明

    - **SO_LINGER**:控制在关闭连接之前是否等待未完成的 I/O 操作。 - **SO_TIMEOUT**:读取超时时间,以毫秒为单位。 - **SO_REUSEADDR**:是否允许重复使用地址和端口组合。 ##### 4. BIO 特定配置 BIO 连接器的...

    Java_TCP_IP_Socket编程(原书第2版)

    10. **套接字选项与网络参数**:Java的Socket类还可以设置套接字选项,如SO_LINGER(控制linger时间)、TCP_NODELAY(禁用Nagle算法)等,以优化网络通信性能。 以上只是Java TCP/IP Socket编程的一些基本概念和...

    socket调试工具socket-1.0-win32-chs.zip

    6. **套接字选项**:如SO_REUSEADDR、SO_LINGER等,这些选项可以调整socket的行为,sokit能帮助理解它们的作用。 7. **协议族与套接字类型**:如AF_INET(IPv4)、AF_INET6(IPv6)、SOCK_STREAM(TCP)、SOCK_...

    windows网络编程技术9-19

    5. **套接字选项与控制消息**:SOCKET选项如SO_REUSEADDR、SO_LINGER等可以调整套接字的行为,而控制消息如MSG_PEEK、MSG_OOB则能获取额外的通信信息。这部分可能涉及如何设置和使用这些选项。 6. **高级网络编程**...

    linux 高级编程

    - **套接字选项**:如SO_REUSEADDR、SO_LINGER等,用于控制套接字行为。 4. **插件**: - **动态链接库(.so文件)**:Linux下的动态库,允许程序在运行时加载功能。 - **dlopen()和dlclose()**:用于程序运行时...

    Java网络高级编程

    7. **套接字编程**:包括套接字选项的设置,如SO_REUSEADDR、SO_LINGER等,以及异常处理,如连接超时、断开重连策略。 8. **网络安全**:Java SSL/TLS支持提供了加密的网络通信,通过SSLSocket和SSLServerSocket...

    Windows 网络编程技术

    - `setsockopt()`和`getsockopt()`函数用于设置和获取套接字的特定选项,如TCP_NODELAY(禁用Nagle算法),SO_LINGER(控制关闭时的行为)等。 - 在`send()`和`recv()`中,可以使用MSG_OOB(紧急数据)、MSG_PEEK...

Global site tag (gtag.js) - Google Analytics