JavaでSocket.closeを起動した時にTCPが相手に送信するフラグについて調査しています。
1. 何も指定しなければ、FIN。
2. SO_LINGERを設定(Socket.setSoLinger(true ,0))していれば、RST。
と言うことは分かったのですが、SO_LINGERを設定していない時にも、
FINではなくRSTを送信することがありました。その時の環境と条件は、
以下の通りです。
環境:OS:Red Hat Enterprise Linux 3
JDK:J2SE1.4.2_08(SunVM)
条件:SO_LINGERを設定していないSocketのcloseを起動。この時、該当コネクションのTCPの受信バッファにデータが存在する。

調査した結果、以下のページを見つけました。
http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/net/articles/connection_release.html
このページの"問題の説明"の最後("問題の回避方法"の直前)に書いてある部分に該当すると考えています。(このドキュメントは5.0から追加されたもののようでした)。

Googleで検索したのですが、この様な状態に関するページが、上記の
1件しか見つけることができず、この動作が一般的な動作なのかが不明です。

JavaでSO_LINGERを設定していないSocketでcloseを起動したときに、
FINではなくRSTが送信される条件をご存知の方がいらっしゃったらご教示ください。