`
greenmoon
  • 浏览: 48646 次
  • 性别: 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规定单位为秒。

分享到:
评论

相关推荐

    setsockopt 设置socket 详细用法.doc

    在深入探讨`setsockopt`的使用方法之前,我们首先需要了解`setsockopt`的基本概念。`setsockopt`是用于修改套接字选项的函数,它允许用户根据需求调整套接字的行为,从而优化网络通信性能或满足特定的应用场景需求。...

    liunx课件关于shell

    例如,`SO_LINGER`可以用于确保数据在关闭连接前被完全发送,而`SO_SNDBUF`和`SO_RCVBUF`则可以调整网络通信的性能,通过增大缓冲区大小来减少数据包丢失。 在Linux Shell编程中,了解和掌握这些系统调用能够帮助...

    setsockopt()改善程序的健壮性

    setsockopt(s, SOL_SOCKET, SO_LINGER, (const char*)&m_sLinger, sizeof(linger)); ``` 这种方式提供了更多的灵活性来控制关闭过程中的行为。 #### 10. 开启调试模式 为了方便调试,可以开启`SO_DEBUG`选项: `...

    setsockopt函数一片不错的文章

    使用`SO_LINGER`选项可以控制在`closesocket()`调用后未发送完的数据如何处理。将`l_onoff`设为1表示在关闭时允许等待数据发送,`l_linger`则定义了允许等待的时间,如5秒。这样可以确保数据完整发送后再关闭Socket...

    setsockopt()设置socket方法

    setsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger)); 这将允许套接字在关闭时等待 5 秒,直到所有数据都被发送完毕。 setsockopt() 函数提供了多种方式来设置套接字的属性,从而影响套接...

    setsockopt函数使用说明

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

    TCP SOCKET用法小结v1.1.doc

    例如,SO_RCVBUF和SO_SNDBUF可以调整接收和发送缓冲区的大小,SO_KEEPALIVE可启用连接保持,而SO_LINGER控制连接关闭时的行为。 6. **选项设置** - 通过setsockopt(),开发者可以自定义socket的行为,例如设置广播...

    Socket Tcp/IP

    - Socket有多种选项和属性,如SO_REUSEADDR、SO_LINGER等,可以调整Socket的行为。 - SO_REUSEADDR允许在关闭连接后立即重用端口,避免TIME_WAIT状态的困扰。 - SO_LINGER控制在关闭Socket时是否等待未发送数据的...

    tcp-proxy:实验性零拷贝 tcp 代理

    tcp 代理用法: $ make $ ./bin/tcp-proxy 例如:$ ./bin/tcp-proxy 本地主机:8080 本地主机:8000 一些实现提示: 默认启动nproc线程,每个线程运行独立的事件循环 (libev) 每个事件循环接受连接(使用 SO_REUSEPORT...

    Sockect_SO

    "Socket_SO"可能是指在Java中使用Socket编程时涉及到的Socket选项,如SO_REUSEADDR、SO_LINGER等。这些选项用于定制Socket的特定行为,以满足不同场景的需求。 首先,我们来详细了解一下Java中的Socket。Socket是...

    winsock

    Winsock提供了多种套接字选项,例如`SO_LINGER`控制断开连接时的行为,`SO_RCVBUF`和`SO_SNDBUF`调整接收和发送缓冲区大小,以及`TCP_NODELAY`禁用Nagle算法以减少延迟。正确设置这些选项对于优化网络性能至关重要...

    高级TCP/IP编程

    在高级TCP/IP编程中,开发者需要理解各种套接字类型(如SOCK_STREAM对应TCP,SOCK_DGRAM对应UDP),以及套接字选项和套接字级别,如SO_REUSEADDR、SO_LINGER等。 此外,网络编程还包括错误处理、性能优化、安全问题...

    Windows Socket2网络编程技术PDF+源码

    4. **高级特性**:可能包含套接字选项的设置,如SO_REUSEADDR、SO_LINGER等,以及信号驱动I/O(SIGIO)和异步事件通知(WSAAsyncSelect)。 5. **并发服务器**:可能包含多线程服务器或使用I/O完成端口(IOCP)的高...

    unix网络编程

    书中详细讲解了这些机制的工作原理和使用方法,帮助读者理解如何有效地管理大量并发连接。 五、错误处理与调试 在网络编程中,错误处理和调试是必不可少的部分。书中给出了各种常见的网络错误及其处理策略,并介绍...

    UNIX网络编程 卷1:套接字联网API(英文版•第3版) 源代码

    5. **套接字选项与控制消息**:深入探讨套接字选项,如SO_REUSEADDR、SO_LINGER等,以及如何使用getsockopt和setsockopt函数。同时,讲解了套接字控制消息(如SCM_RIGHTS,用于传递文件描述符)的使用。 6. **错误...

    unix网络编程卷二

    4. **套接字选项 (Socket Options)**:套接字选项允许程序在创建套接字后调整其行为,如SO_REUSEADDR、SO_LINGER、TCP_NODELAY等。这些选项可以控制连接的重用、关闭时的行为以及是否启用TCP的Nagle算法等。 5. **...

    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 ...

    计算机网络socket编程实验

    在实验中,学生们可能还会接触到套接字选项,如SO_REUSEADDR、SO_LINGER等,它们可以调整Socket的行为。另外,多线程或多进程编程也可能被用来处理并发连接,以提高服务器的处理能力。对于TCP,还可能涉及到滑动窗口...

    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 ...

Global site tag (gtag.js) - Google Analytics