linux close_wait

场景:Linux Close_wait,该如何处理

Linux Close_wait
最近在linux学习 socket编程。 
程序使用轮询的方式.
ret=select(maxfd+1,&scanfd,NULL,NULL,&tv);


服务器有做连接的检查,超过一定时间某一个链接没有收到数据,就使用close(),把链接给关掉。
但实际情况发现是,程序已经发出了CLOSE命令,
然后用netstat -an 查看,端口的连接还在,并且一直是close_wait状态,持续很久的状态。
运行大概一周,就有很多这种 close_wait.很头痛……。

然后有上网找了一些资料,下面这种是快速关闭连接的
struct linger lingerBuffer;
lingerBuffer.l_onoff=1;//nonzero means enable Linger function.
lingerBuffer.l_linger=0;// timeout must set to zero.
setsockopt(fd,SOL_SOCKET,SO_LINGER,&lingerBuffer,sizeof(lingerBuffer));


大家是怎么解决的。
Linux socket close_wait

------解决方案--------------------
先确认你是否准确的对每个socket执行了,shutdown & close。
设置linger可以避免FIN 4次握手的状态迁移而直接发送RST关闭虚电路,但也必须保证你准确close了。