[freetds] connect(2) for UDP
Frediano Ziglio
freddy77 at gmail.com
Wed Dec 17 04:35:39 EST 2008
2008/12/15 James K. Lowden <jklowden at freetds.org>:
> Hello Frediano!
>
> /*
> * Request the instance's port from the server.
> * There is no easy way to detect if port is closed so we always try to
> * get a reply from server 16 times.
> */
> for (num_try = 0; num_try < 16; ++num_try) {
>
> But there is an easy way: use connect(2) and write(2) instead of sendto!
> connect(2) sets errno to ECONNREFUSED if no one is listening to the port,
> even for UDP.
>
> This would let us know immediately if port 1434 is reachable, and could
> reduce our retry loop to, say, three tries.
>
Mmmm... from comments
/*
* on cluster environment is possible that reply packet came from
* different IP so do not filter by ip with connect
*/
the problem is not that easy... if server has two interfaces
configured server reply from a single interface so it can happen that
client ask to an interface with a given IP but server reply from
another IP, in such situation with connect used recv don't receive
server reply :( I think we can solve this problem using two sockets,
one connected and another not connected.
freddy77
More information about the FreeTDS
mailing list