It is found that ungraceful TCP disconnect makes ODBC driver stuck at socket recv().
Ungraceful TCP disconnect could be caused:
1. Network failure (or new firewall rules)
2. Remote party shutdown (Half Closed Connection)
So, the proposal is:
setup socket options:
1) SO_KEEPALIVE enabled
2) TCP_KEEPIDLE to 60 sec. It is 2 hour by default
3) TCP_KEEPINTVL to 1 sec. It is 1 sec at Win and 75 sec at Linux by default.
4) send/receive buffers to some greater value (8k by default)
- links to