When a firewall or network outage silently drops an idle TCP connection between the Policy Server and a Web Agent or Access Gateway (SPS), neither side is notified. The Policy Server keeps the connection in ESTABLISHED state and keeps its worker thread blocked waiting for data that will never arrive [1]. As failed requests accumulate, worker threads stop being released, and clients see intermittent 500 errors, failed authentications/authorizations, growing connection queues, or socket errors such as Failed to send response on session #... in smps.log [1][3].
TCP has no built-in mechanism to detect a silently-dropped connection unless keep-alive probing is enabled. By default, SiteMinder components rely on OS-level TCP behavior only, so a mid-path firewall reset/timeout goes undetected on both ends [1].
Resolution — enable SM_ENABLE_TCP_KEEPALIVE:
Set the environment variable to 1 on the affected component(s) (Policy Server, Web Agent, and/or Access Gateway), then restart the service. Accepted values are 0 (disabled) or 1 (enabled) — anything else disables the feature [1][2].
# cd /{home_sps}/# source ca_sps_env.sh# cd /{home_sps}/proxy-engine/# ./sps-ctl startsslOptional — tune OS keep-alive timing if the default interval is too slow to detect drops in your environment (Linux example):
# cat /proc/sys/net/ipv4/tcp_keepalive_time# cat /proc/sys/net/ipv4/tcp_keepalive_intvl# cat /proc/sys/net/ipv4/tcp_keepalive_probes
Adjust with echo <value> > /proc/sys/net/ipv4/tcp_keepalive_time, etc. Coordinate with your OS/network team before changing system-wide TCP defaults [3].
Verification:
[TCP Keep-Alive] packets. In Wireshark, filter on tcp.analysis.keep_alive to isolate them [3].