Multiple connection retries to the same IP address

Jan Blom <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <DB3PR05MB4289BCD46C2D24F2AE70A4AEE6B0@DB3PR05MB428.eurprd05.prod.outlook.com>
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
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.