通常Unix close函数也用来关闭套接字,并终止TCP连接。
#include <unistd.h>
int close(int sockfd); /*返回:若成功则为0,若出错则为-1*/
默认行为:close函数把TCP套接字标记成已关闭,然后立即返回到调用进程,该套接字描述符不能再由调用进程使用,也就是说它不能再作为read或write的第一个参数。然而TCP将尝试发送已排队等待发送到对端的任何数据,发送完毕后发生的是正常的TCP连接终止序列。
描述符引用计数
并发服务器中父进程关闭已连接套接字只是导致相应描述符减1。既然引用计数值仍大于0,这个close调用并不引发TCP的四分组连接终止序列。
如果确实想在某个TCP连接上发送一个FIN,那么可以改用shutdown函数以代替close。