On Thu, 2 Sep 1999, Ryan Bloom wrote:
> Okay, I must be missing something. I am trying to put some of the APR
> stuff into Apache 2.0, and I came across a case I wasn't prepared for when
> I wrote APR.
> bind (sock, &our_query_sin, sizeof(struct sockaddr_in));
> connect(sock, &rmt_query_sin, sizeof(struct sockaddr_in));
> In all of the TCP/IP network programming I have done, bind is done on the
> server side, and connect is done on the client side. In fact, most of my
> books say the bind is really unnecessary.
If I recall correctly, the gist of this is: that this way a TCP client can
control its IP source address that will be used for anything going out of
this socket. And this in turn is nessesary to accomodate for restriction
'3' in the rfc:
Queries are permitted only for fully specified connections. The
query contains the local/foreign port pair -- the local/foreign
address pair used to fully specify the connection is taken from the
local and foreign address of query connection. This means a user on
address A may only query the server on address B about connections
between A and B.
See ftp://ftp.ripe.net/rfc/rfc1413.txt or any other source for the full
story. The bit about bind() controlling the IP source address in a socket
is described as a note in Stevens and on the BSD man pages.
Dw.
St. Johns [Page 8]
|