freetds AT lists.ibiblio.org
Subject: FreeTDS Development Group
List archive
- From: "James K. Lowden" <jklowden AT freetds.org>
- To: FreeTDS Development Group <freetds AT lists.ibiblio.org>
- Subject: Re: [freetds] connect(2) for UDP
- Date: Thu, 18 Dec 2008 18:40:43 -0500
Peter Deacon wrote:
>
> UDP has no concept of connection. Each message stands alone.
>
> If the server binds to all interfaces and there are multiple interfaces
> capable of reaching the client the source address of messages from the
> server should be concidered random/determined by the routing system.
Not only are you right, you're right. I even read as much after posting
my message.
And I found a server that answers on a different interface! :-) And,
using a combination of techniques, I seem to have something that works.
1. If I connect only, I miss answers from other interfaces.
2. If I bind only, I don't get ECONNREFUSED, only a timeout. Perhaps
that's me or my implementation.
Therefore, I do both, using two sockets, of course. select(2) tells me
which one is ready, and, mirabile dictu, I get what I want: success,
timeout, or ECONNREFUSED.
== code ==
fd_set fds;
FD_ZERO(&fds);
FD_SET(s1, &fds);
FD_SET(s2, &fds);
struct timeval timeout;
bzero(&timeout, sizeof(timeout));
timeout.tv_sec = 5;
timeout.tv_usec = 0;
cout << "reading from " << hostname << ":" << port << " ... " <<
flush;
if( (erc = select(s2 + 1, &fds, NULL, NULL, &timeout)) == -1 ) {
perror("select(2) failed");
return 1;
}
if( 0 == erc ) {
cerr << "timed out, sorry.\n";
return 1;
}
cout << erc << " fd ready on " << flush;
int s;
char buffer[2048];
if( FD_ISSET(s1, &fds) ) {
s = s1;
cout << "connected ... " << flush;
}
if( FD_ISSET(s2, &fds) ) {
s = s2;
cout << "bound ... " << flush;
}
while( (erc = read(s, &buffer, sizeof(buffer))) == -1 ) {
perror("could not read");
return 1;
}
cout << "done. (read " << erc << " bytes)\n" << flush;
== edoc ==
Data arrive on the bound port. Errors are detected on the connected port:
== output ==
$ ./connect_udp -h db03 -p 1434
address of db03 is 10.10.10.10
binding local UDP socket ... done
sending to db03:1434 ... done. (sent 1)
connecting UDP socket to db03:1434 ... done
writing to db03:1434 ... done. (wrote 1)
reading from db03:1434 ... 1 fd ready on bound ... done. (read 411 bytes)
./connect_udp -h localhost -p 1434
address of localhost is 127.0.0.1
binding local UDP socket ... done
sending to localhost:1434 ... done. (sent 1)
connecting UDP socket to localhost:1434 ... done
writing to localhost:1434 ... done. (wrote 1)
reading from localhost:1434 ... 1 fd ready on connected ...
could not read: Connection refused
== tuptou ==
Too bad none of this is standardized. Standards? We don't need no
stinking standards!
That about wraps up the research. I think I'll file a bug report and see
if the project maintaner will update FreeTDS. Oh, wait....
Regards,
--jkl
Attachment:
connect_udp.C
Description: Binary data
-
Re: [freetds] connect(2) for UDP
, (continued)
-
Re: [freetds] connect(2) for UDP,
Peter Deacon, 12/18/2008
- Re: [freetds] connect(2) for UDP, Frediano Ziglio, 12/18/2008
- Re: [freetds] connect(2) for UDP, Jackson, Craig (Gale), 12/18/2008
- Re: [freetds] connect(2) for UDP, James K. Lowden, 12/18/2008
-
Re: [freetds] connect(2) for UDP,
Christos Zoulas, 12/18/2008
-
Re: [freetds] connect(2) for UDP,
James K. Lowden, 12/18/2008
- Re: [freetds] connect(2) for UDP, Christos Zoulas, 12/18/2008
-
Re: [freetds] connect(2) for UDP,
James K. Lowden, 12/18/2008
-
Re: [freetds] connect(2) for UDP,
Jackson, Craig (Gale), 12/17/2008
-
Re: [freetds] connect(2) for UDP,
James K. Lowden, 12/17/2008
-
Re: [freetds] connect(2) for UDP,
Peter Deacon, 12/18/2008
-
Re: [freetds] connect(2) for UDP,
James K. Lowden, 12/18/2008
- [freetds] 0.82 freebcp: -h option seems to be broken, Constantin Vasilyev, 12/19/2008
-
Re: [freetds] connect(2) for UDP,
James K. Lowden, 12/18/2008
-
Re: [freetds] connect(2) for UDP,
Peter Deacon, 12/18/2008
-
Re: [freetds] connect(2) for UDP,
James K. Lowden, 12/17/2008
-
Re: [freetds] connect(2) for UDP,
Peter Deacon, 12/18/2008
Archive powered by MHonArc 2.6.24.