码迷,mamicode.com
首页 > 其他好文 > 详细

网络编程Socket之TCP之close/shutdown详解

时间:2014-07-20 22:24:53      阅读:367      评论:0      收藏:0      [点我收藏+]

标签:网络编程   socket   tcp   close   shutdown   

close

当套接字的引用计数为0的时候才会引发TCP的四分组连接终止序列;

 

shutdown

不用管套接字的引用计数就激发TCP的正常连接终止序列;


这里由一个SO_LINGER套接字选项

struct linger {

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

     int l_linger; /* linger time,POSIX specifies units as seconds */

};


shutdown:SHUT_RD

关闭连接的读这一半,进程不能再对这样的套接字调用任何读操作;

在套接字上不能再发出接收请求,进程仍可往套接字发送数据,套接字接收缓冲区中所有数据被丢弃,再接收到的任何数据由TCP丢弃,对套接字发送缓冲区没有任何影响;


shutdown:SHUT_WR

关闭连接的写这一半,进程不能再对这样的套接字调用任何写操作;

在套接字上不能再发出发送请求,进程仍可从套接字接收数据,套接字发送缓冲区中的内容被发送到对端,后跟正常的TCP连接终止序列(即发送FIN),对套接字接收缓冲区无任何影响;


shutdown:SHUT_RDWR

关闭连接的读和写;


close:l_onoff = 0(默认情况):

在套接字上不能再发出发送或接收请求,套接字发送缓冲区中的内容被发送到对端,如果描述符引用计数变为0,在发送完发送缓冲区的数据后,跟以正常的TCP连接终止序列(即发送FIN),套接字接收缓冲区中的内容被丢弃;


close:l_onoff = 1,l_linger = 0:

在套接字上不能再发出发送或接收请求,如果描述符引用计数变为0,RST被发送到对端,连接的状态被置为CLOSED(没有TIME_WAIT状态),套接字发送缓冲区和接收缓冲区中的内容被丢弃;


close:l_onoff = 1,l_linger  != 0:

在套接字上不能再发出发送或接收请求,套接字发送缓冲区中的内容被发送到对端,如果描述符引用计数变为0,在发送完发送缓冲区的数据后,跟以正常的TCP连接终止序列(即发送FIN),套接字接收缓冲区中的内容被丢弃,如果在连接变为CLOSED状态前延滞时间到,那么close返回EWOULDBLOCK错误;


未完待续... ...


参考:

UNIX Network ProgrammingVolume 1, Third Edition: TheSockets Networking API


网络编程Socket之TCP之close/shutdown详解

标签:网络编程   socket   tcp   close   shutdown   

原文地址:http://blog.csdn.net/junjun150013652/article/details/37994907

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!