Skip to Content.
Sympa Menu

freetds - [freetds] Multiple connection retries to the same IP address

freetds AT lists.ibiblio.org

Subject: FreeTDS Development Group

List archive

Chronological Thread  
  • From: Jan Blom <jan.blom AT peopleinteractive.se>
  • To: "freetds AT lists.ibiblio.org" <freetds AT lists.ibiblio.org>
  • Subject: [freetds] Multiple connection retries to the same IP address
  • Date: Mon, 18 Apr 2016 16:56:47 +0000

Hello,

I'm using FreeTDS 0.95 and have been puzzled why the connection timeout
setting seemed not to work. Digging into the problem I notice the same target
IP address always appear three times, for instance looking at the config dump
from osql. I have provided the fqdn name for the host in freetds.conf.

The FreeTDS implementation will loop over all IP addresses when trying to
connect if there is a failure. This results in a 3x total timeout duration
compared to the configuration. I cannot see a good reason for this logic,
given it is the same IP address in all three attempts.

The reason is that the call to getaddrinfo (in tds/config.c) doesn't send in
any preference regarding address type. Therefore we get back something like
this:

1.
Family : AF_INET
Type : SOCK_STREAM
Protocol : IPPROTO_TCP
Socket address: ('23.235.43.223', 0)

2.
Family : AF_INET
Type : SOCK_DGRAM
Protocol : IPPROTO_UDP
Socket address: ('23.235.43.223', 0)

3.
Family : AF_INET
Type : SOCK_RAW
Protocol : IPPROTO_IP
Socket address: ('23.235.43.223', 0)

However, later on , when we actually connect the socket we will use
SOCK_STREAM only. We don't care about UDP or raw sockets.

My assumption would be that the tds_lookup_host() function should set
hints.ai_socktype = SOCK_STREAM;

This will result in only #1 above in return.

Does this make sense or am I missing something here?


Thanks for your time and support!
Jan Blom





Archive powered by MHonArc 2.6.24.

Top of Page