Socket关闭后,如何清理输出缓冲区来阻止已经在输出缓冲区中的数据发送?

实践发现,当使用socketChannel.close()之后,对于close之前已经写入缓冲区但由于网络原因没有发送成功的数据,在server端网络恢复后,还是能接收到该数据;
求问是否有什么办法能在调用Close之前,将此socketChannel的输出缓冲区中的数据清理掉?

从该博主处得到的:http://blog.csdn.net/Ctrl_qun/article/details/52454380

这些I/O缓冲区特性可整理如下:
I/O缓冲区在每个TCP套接字中单独存在;
I/O缓冲区在创建套接字时自动生成;
即使关闭套接字也会继续传送输出缓冲区中遗留的数据;
关闭套接字将丢失输入缓冲区中的数据。

如果没有办法清理,可以换一个思路,在Close之前,先发送关闭指令给Server,Server收到关闭指令后,主动断开连接,不再处理后面收到的数据包。

给后面的人一个参考:
SO_LINGER:是Socket设置延迟关闭的一个标志,默认不延迟,这种情况下,会尽可能的将缓冲区内的数据发出去,当设置为true,延迟时间设置为0时,则将不发送FIN直接close连接并立马清理缓冲区;
所以我这个问题的解决办法就是设置SO_LINGER为true,0