For the impatient:
How to change the value of /proc/sys/net/ipv4/tcp_retries2
for a single connection in Linux, using setsockopt()
I suggest that if the TCP_USER_TIMEOUT
socket option described by Kimvais is available, you use that. On older kernels where that socket option is not present, you could repeatedly call the SIOCOUTQ
ioctl()
to determine the size of the socket send queue - if the send queue doesn't decrease over your timeout period, that indicates that no ACKs have been received and you can close the socket.