socket关闭函数:
1、close()
close只有在引用计数为0时,才会真正调用close(),否则只是引用计数减1 。
调用close(),系统会尝试发送完内核缓冲区内所有数据,然后才会发送FIN。
2、shutdown()
shutdown不理会引用计数和内核缓冲区内的剩余待发数据包,直接发送FIN。
shuwdown可以只关闭套接字某个方向的连接,例如关闭发送,关闭接收,或两者都关闭。
3、让套接字直接发送RST,从而没有FIN的发送,接收方返回ECONRESET错误,连接直接关闭。
RST在TCP协议中表示复位,用来异常的关闭连接。
发送RST包关闭连接时,不必等缓冲区的包都发出去,直接就丢弃缓冲区的包发送RST包,接收端接收到RST包以后,也不必发送ACK包确认。