We ended up installing libkeepalive.so on the host system for the 5.5.4.0
library manager client and updating the startup script for that TSM server
to set the LD_PRELOAD environment variable to the location of the library
before starting the server code. This causes the dynamic subroutine loader
to replace the normal socket open routine with a wrapper that calls the
normal routine and then sets the SO_KEEPALIVE option for the new socket.
I am not especially enthusiastic about this arrangement because it will
provide TSM support with a very convenient pretext for dismissing any and
all bug reports for the TSM 5.5.4.0 server. However, all of the politically
realistic alternatives look even uglier.