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规定单位为秒。
相关推荐
在客户端程序中设置socket的SO_LINGER选项,可以控制连接关闭的方式,有时可以缩短TIME_WAIT的持续时间。 4. **开启tcp_tw_recycle和tcp_timestamps**: 开启这两个内核选项,可以加速TIME_WAIT状态的回收,但...
例如,`SO_LINGER`可以用于确保数据在关闭连接前被完全发送,而`SO_SNDBUF`和`SO_RCVBUF`则可以调整网络通信的性能,通过增大缓冲区大小来减少数据包丢失。 在Linux Shell编程中,了解和掌握这些系统调用能够帮助...
- `SO_LINGER`:配置close或shutdown操作是否等待数据发送或超时,参数是一个linger结构体,包含超时时间和linger行为。 在Linux网络驱动开发中,实现这些套接字选项的处理是核心任务之一。开发者需要理解每个选项...
6. **套接字选项**:如SO_REUSEADDR、SO_LINGER等,这些选项可以调整socket的行为,sokit能帮助理解它们的作用。 7. **协议族与套接字类型**:如AF_INET(IPv4)、AF_INET6(IPv6)、SOCK_STREAM(TCP)、SOCK_...
9. **linger选项(SO_LINGER)**:在需要确保发送完所有数据后再关闭Socket的情况下,可以设置`SO_LINGER`。设置`l_onoff`为1启用linger,并设置`l_linger`为一个适当的秒数,例如5秒,这样即使在`closesocket`时仍...
3. **参数option_name**:表示我们要设置的具体选项,如SO_DEBUG、SO_REUSEADDR等。 4. **参数option_value**:指向包含新选项值的缓冲区,根据option_name的值决定其含义。 5. **参数option_len**:表示option_...
Socket选项表中包含多种选项,如`SO_DEBUG`、`SO_DONTROUTE`、`SO_KEEPALIVE`、`SO_LINGER`、`SO_OOBINLINE`、`SO_RCVBUF`、`SO_RCVLOWAT`、`SO_SNDBUF`、`SO_SNDLOWAT`、`TCP_MAXSEG`和`TCP_NODELAY`等。...
#### 三、参数说明 1. **sockfd**:目标套接字的描述符。 2. **level**:指定选项所属的协议层或协议家族。如 `SOL_SOCKET` 表示该选项适用于所有类型的套接字。 3. **optname**:表示具体的选项名。 4. **optval**...
例如,SO_RCVBUF和SO_SNDBUF可以调整接收和发送缓冲区的大小,SO_KEEPALIVE可启用连接保持,而SO_LINGER控制连接关闭时的行为。 6. **选项设置** - 通过setsockopt(),开发者可以自定义socket的行为,例如设置广播...
* SO_LINGER:延迟关闭连接。 * SO_OOBINLINE:带外数据放入正常数据流。 * SO_RCVBUF:接收缓冲区大小。 * SO_SNDBUF:发送缓冲区大小。 * SO_RCVLOWAT:接收缓冲区下限。 * SO_SNDLOWAT:发送缓冲区下限。 * SO_...
例如,`SO_REUSEADDR`用于允许立即重用套接字地址,`SO_LINGER`用于控制断开连接时的行为,`TCP_NODELAY`用于禁用Nagle算法等。 4. `optval`: 指向选项值的指针,根据`optname`的不同,可能是一个整数、结构体或其他...
`SO_LINGER` 是Socket的一个选项,用于控制Socket关闭时的行为。 **结构体:** ```c struct linger { int l_onoff; /* 0 = off, non-zero = on */ int l_linger; /* linger time, POSIX specifies units as ...
setsockopt(s, SOL_SOCKET, SO_LINGER, (const char*)&m_sLinger, sizeof(linger)); ``` 这种方式提供了更多的灵活性来控制关闭过程中的行为。 #### 10. 开启调试模式 为了方便调试,可以开启`SO_DEBUG`选项: `...
setsockopt(socket_fd, SOL_SOCKET, SO_LINGER, &linger_opt, sizeof(linger_opt)); int keepidle = 60; // 60秒后首次发送探测 int keepintvl = 15; // 探测间隔15秒 int keepcnt = 3; // 最大探测次数3次 ...
10. **套接字选项与网络参数**:Java的Socket类还可以设置套接字选项,如SO_LINGER(控制linger时间)、TCP_NODELAY(禁用Nagle算法)等,以优化网络通信性能。 以上只是Java TCP/IP Socket编程的一些基本概念和...
- **SO_LINGER**: 控制socket关闭时的行为,可以设置为强制发送剩余数据再关闭,或立即关闭并丢弃未发送的数据。 2. **缓冲区大小调整** - **接收缓冲区**: 增大接收缓冲区可以一次性接收更多数据,减少接收操作...
为了调试和优化,还可以利用套接字选项(如`SO_REUSEADDR`、`SO_LINGER`等)和性能相关的参数来调整Socket的行为。同时,了解网络层的概念,如IP地址、端口号、网络字节序等,也是Socket编程的基础。 总结,Windows...
- `SO_LINGER`:设置Socket在关闭前的闲置时间,即在关闭Socket前是否允许有未完成的数据传输继续进行。 - `TCP_NODELAY`:启用或禁用Nagle算法,决定是否立即发送数据,而非等到有足够的数据后再发送。 下面是一个...
当`SO_LINGER`开启且设置的超时时间为0时,`close()`会发送RST包,从而跳过TIME_WAIT状态。这种方式虽然可以快速关闭连接,但违反了TCP规范,可能导致数据丢失。`SO_LINGER`对`shutdown()`没有直接影响。 最后,TCP...