Skip to content

close socket

Linux 提供了如下system call来关闭一个socket:

1、man 2 close

这是Linux通用的关闭fd 的system call

2、man 2 shutdown

What do close do?

当使用closeshutdown来关闭一个socket的时候,它所做的是:

1、本端发送FIN,然后进入FIN-WAIT-1状态

2、等待FIN ACK,在收到FIN ACK后,进入FIN-WAIT-2状态,然后返回

NOTE:

是否是这样的,还有有待确认

3、本端进入TIME_WAIT 状态

参考:

1、stackoverflow When is TCP option SO_LINGER (0) required? # A

Will close block 2MSL?

不会的,测试程序:

1、zhihu 网络编程:SO_REUSEADDR的使用

2、Linux-TCP-impl

通过其中的测试程序可知,在当调用close(fd)来关闭一个socket时,不会block 2MSL,而是立即返回,但是TCP connection还是会完成TCP FSM,直至完成后,对应的TCP connection才会被释放。