在Linux操作系统中,`so_linger`参数在网络编程中扮演着重要的角色。它被用来控制套接字关闭时的行为,特别是在套接字还有未发送完的数据时。 通常情况下,当我们调用`close()`函数关闭一个套接字时,操作系统会尝试将套接字中的所有数据发送完毕,然后再关闭这个套接字。但是有时候,我们可能希望在关闭套接字时立即返回,并让操作系统丢弃掉未发送完的数据。 这时候就可以使用`so_linge
原创 2024-04-03 09:43:02
81阅读
在Linux系统中,socket编程是非常常见和重要的部分。而在socket编程中,so_linger参数也是一个很有意义的概念。 在Linux系统中,当我们调用close()函数关闭一个socket套接字时,操作系统会处理一些底层的流程,比如确保数据的正确传输和接收。而so_linger参数就是用来控制这个流程的一个参数。 在socket中,so_linger参数是一个结构体,其中包含两个成
原创 2024-03-26 10:04:25
67阅读
close函数的作用是关闭套接字,并终止TCP连接。unix网络编程这本书上是这样说的,我觉得这个解释有人会让人产生误解。close了某个socket,该socket就真的必须关闭吗?其实不是,close是将该套接字的引用计数减1,当某个套接字的引用计数为0时,该套接字就被关闭了;不为0,就不会被关闭。多进程并发服务器中会出现这种情况,我开始就误解了。 SO_LING
原创 2021-06-04 15:56:19
430阅读
在说明套接字选项SO_LINGER之前,我们来先看一个问题。如果发送缓冲区中还有数据没有发送到对方协议栈,此时close发送端的socket会发生什么,下面代码给出答案。服务端:#include #include #include #include #include #include #include #include #include #include #includ
原创 2021-06-04 16:00:02
209阅读
此图为TCP4次握手图,当引用层调用close()关闭sockfd时,会发送FIN给对方。默认情况下,Close会立即返回,并由TCP模块负责将发送缓冲区中的残留数据发送出去。应用层无法知道缓冲区中的数据是否成功发送完成。SO_LINGER选项可以用来控制调用close函数关闭socket后的行为。SO_LINGER选项有如下结构:structlinger{intl_onoff;/*0=off,n
原创 2017-12-01 22:19:08
10000+阅读
1点赞
SO_LINGER在setsockopt(...)中的使用含义。
转载 精选 2013-02-01 21:19:01
617阅读
SO_LINGER使用
转载 2009-09-14 10:08:00
112阅读
2评论
当调用closesocket关闭套接字时,SO_LINGER将决定系统如何处理残存在套接字发送队列中的数据。处理方式无非两种:丢弃或者将数据继续发送至对端,优雅关闭连接。事实上,SO_LINGER并不被推荐使用,大多数情况下我们推荐使用默认的关闭方式(即下方表格中的第一种情况)。 下方代码段显示linger结构语法,表格为不同参数情况下的套接字行为。 typedef struct
原创 2010-07-09 10:47:22
10000+阅读
SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成。没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工作并返回。如果设置了SO_LINGER选项,并且等待时间为正值,则在清理之前会等待一段时间。以调用close()主动关闭为例,在发送完FIN包后,会进入FIN_WAIT_1状态。如果没有延迟关闭(即设置SO_LINGER选项),在调用tcp_send_fin()发送FIN后会立即调用sock_orphan()将sock结构从进程上下文中分离。分离后,用户层进程不会再接收到套接字的读写事件,也不知道套接字发送缓冲区中的数据是否被对端接. Read More
转载 2013-07-19 19:16:00
149阅读
2评论
TCP协议中的SO_LINGER选项 SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成。没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工作并返回。如果设置了SO_LINGER选项,并且等待时间为正值,则在清理之前会等待一段时间。 以调用
转载 2016-05-30 19:04:00
200阅读
2评论
SO_LINGER 是相当复杂的选项之一,它主要影响 close 和 shutdown 函数的行为(参考 man
原创 2022-08-26 12:03:34
238阅读
SO_LINGER选项用来设置延迟关闭的时间,等待套接字发送缓冲区中的数据发送完成。 没有设置该选项时,在调用close()后,在发送完FIN后会立即进行一些清理工作并返回。如果设置了SO_LINGER选项,并且等待时间为正值,则在清理之前会等待一段时间。 以调用close()主动关闭为例,在发送完
转载 2017-08-20 19:16:00
175阅读
2评论
此设置说明是否对于套接字调用closesocket函数以后是否进行延迟。如果设置此属性并且设置延迟时间不为0时。则我们调用closesocket函数时,系统会等到剩余数据发送完毕后或者超过设定时间后则返回,我们叫这种关闭为“从容关闭”。当我们设置的延迟时间为0时,便不用担心调用closesocket函数后进入“锁定状态”(及TIME_WAIT状态)。我们称这种关闭为“强制关闭”。 Del
原创 2011-03-13 20:40:19
789阅读
Linux网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR.  SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回. SO_LINGER选项则是用来
转载 2017-08-20 21:06:00
59阅读
 ​​Linux​​网络编程中,socket的选项很多.其中几个比较重要的选项有:SO_LINGER(仅仅适用于TCP,SCTP), SO_REUSEADDR.  SO_LINGER 在默认情况下,当调用close关闭socke的使用,close会立即返回,但是,如果send buffer中还有数据,系统会试着先把send buffer中的数据发送出去,然后close才返回. SO_LINGER
转载 2020-08-22 17:20:00
181阅读
2评论
调用 close 函数,设置了 SO_LINGER 为 true如果设置 SO_LINGER 为 true,linger 设置为 0,当调用 socket.close() 时, close 函数会立即返回,同时丢...
转载 2020-03-26 17:40:00
304阅读
2评论
1:设置该选项: public void setSoLinger(boolean on, int seconds) throws SocketException;     读取该选项:public int getSoLinger() throws SocketException     SO_LINGER选项用来控制Socket关闭时的行为,默认情况下,执行
转载 精选 2013-07-29 18:20:39
414阅读
1:设置该选项: public void setSoLinger(boolean on, int seconds) throws SocketException;     读取该选项:public int ge
原创 2022-09-12 01:15:37
241阅读
1:设置该选项: public void setSoLinger(boolean on, int seconds) throws SocketException;     读取该选项:public int getS
原创 2023-07-13 17:59:56
260阅读
某些具体程序要求待未发送完的数据发送出去后再关闭socket,可通过设置让程序满足要求: struct linger { u_short l_onoff; u_short l_linger; }; struct linger m_sLinger; m_sLinger.l_onoff = 1; //在
转载 2020-08-02 12:20:00
47阅读
2评论
  • 1
  • 2
  • 3
  • 4
  • 5