TCP status question

There is a server and a client,when client send a message to server,server can send a reply to client. The status of server and client is ESTABLISHED.Then I halt the client,I find the server status is CLOSE_WAIT and the client status is FIN_WAIT_2. Many minutes passed,I find the the server status still is CLOSE_WAIT and the client status still is FIN_WAIT_2. Why the status of server and client isn't CLOSED? Anybody could tell me the reason? I am puzzled with TCP status for a very long time.

Thanks

I am no expert in TCP, but I know that if you 'abort' your client, the server is doing a 'passive close' and the server will go into 'CLOSE_WAIT' state. The time interval for close_wait will depend on the system.

In Solaris, you can find out all these time interval settings

$ for i in `ndd /dev/tcp \? | awk '/interval/{print $1}'`
  do
  echo "$i=`ndd /dev/tcp $i`"
  done
tcp_time_wait_interval=60000
tcp_ip_abort_cinterval=180000
tcp_ip_abort_linterval=180000
tcp_ip_abort_interval=480000
tcp_ip_notify_cinterval=10000
tcp_ip_notify_interval=10000
tcp_keepalive_interval=7200000
tcp_rexmit_interval_initial=3000
tcp_rexmit_interval_max=60000
tcp_rexmit_interval_min=400
tcp_deferred_ack_interval=100
tcp_fin_wait_2_flush_interval=675000
tcp_rexmit_interval_extra=0
tcp_co_timer_interval=20
tcp_local_dack_interval=50
tcp_ndd_get_info_interval=1000
tcp_push_timer_interval=50
tcp_close_wait_interval(obsoleted-=name is non-existent for this module
for a list of valid names, use name '?'

Recently I talked about the TIME_WAIT in my blog.
Chi Hung Chan: Lots of TIME_WAIT in Your Netstat
See the attached TCP state diagram to understand the relationship of various states.