Detecting dead TCP connection

"Andrew Victor" <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <[email protected]>
hi,

Is there a way to easily /quickly detect if an MS-SQL server has
closed the TCP connection, or the connection is dead?

Our application maintains a pool of open database connections, and
when it gets a request we needs to execute a database stored-procedure
on one of those connections.
We use the ctlib interface, so we call ct_command(), ct_param() and
then ct_send().
But only after the ct_send() step do we get any error: "Write to the
server failed".

Looking at the FreeTDS source, the TCP connection may be marked as
"closed" at the OS level but since FreeTDS hasn't subsequently
performed any operations (read/write/etc) on the socket it does not
know the TCP connection is closed.
It's only when ct_send() tries to send a message, does the OS indicate
the socket has been closed.

Using the TCP KeepAlive mechanism also only informs the OS level
earlier, not FreeTDS or the application.


1. Is there a command that can be used to check the real state
(alive/dead) of the TCP connection?
2. Is there a way that the Client Message Callback could be triggered
earlier?  ie, when the OS detects the connection was closed.
3. Is there a way to auto-reconnect and automatically re-execute the command?


Regards,
  Andrew Victor
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.