Re: Multiple connection retries to the same IP address

Frediano Ziglio <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <CAHt6W4d4y+hzBBjqS7voSQu3Y9QELQM3qKJ4BqMSj7kjG57fOQ@mail.gmail.com>
2016-04-18 17:56 GMT+01:00 Jan Blom <[email protected]>:
> 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
>


Make sense. It's just that the change was quite recent, previously we
took into account just the first address so we didn't had this issue.
I think your suggestion should go as a patch.

Frediano
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.