Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.busybox.net/busybox.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-04-04 15:02:55 +0400
committerDenis Vlasenko <vda.linux@googlemail.com>2007-04-04 15:02:55 +0400
commit794687947fe9eb15b2512a0d9645d827348c5f6f (patch)
tree0fb7585537a86b0e02cb7c96caa5c04b70eacb74 /ipsvd/tcpudp.c
parent64a15124e71b89dca7b00ba76a2ca821e69b5daa (diff)
Add/improve comment, shorten some usage texts. No code changes.
Diffstat (limited to 'ipsvd/tcpudp.c')
-rw-r--r--ipsvd/tcpudp.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/ipsvd/tcpudp.c b/ipsvd/tcpudp.c
index 9f098c32e..66f44e9a6 100644
--- a/ipsvd/tcpudp.c
+++ b/ipsvd/tcpudp.c
@@ -331,12 +331,31 @@ int tcpudpsvd_main(int argc, char **argv)
* to ones coming from this remote IP. */
xconnect(0, &remote.sa, sa_len);
/* hole? at this point we have no wildcard udp socket...
- * can this cause clients to get "port unreachable" icmp? */
+ * can this cause clients to get "port unreachable" icmp?
+ * Yup, time window is very small, but it exists (is it?) */
/* Open new non-connected UDP socket for further clients */
sock = xsocket(lsa->sa.sa_family, tcp ? SOCK_STREAM : SOCK_DGRAM, 0);
setsockopt_reuseaddr(sock);
xbind(sock, &lsa->sa, sa_len);
socket_want_pktinfo(sock);
+
+ /* Doesn't work:
+ * we cannot replace fd #0 - we will lose pending packet
+ * which is already buffered for us! And we cannot use fd #1
+ * instead - it will "intercept" all following packets, but child
+ * do not expect data coming *from fd #1*! */
+#if 0
+ /* Make it so that local addr is fixed to localp->sa
+ * and we don't accidentally accept packets to other local IPs. */
+ /* NB: we possibly bind to the _very_ same_ address & port as the one
+ * already bound in parent! This seems to work in Linux.
+ * (otherwise we can move socket to fd #0 only if bind succeeds) */
+ close(0);
+ set_nport(localp, htons(local_port));
+ xmove_fd(xsocket(localp->sa.sa_family, SOCK_DGRAM, 0), 0);
+ setsockopt_reuseaddr(0); /* crucial */
+ xbind(0, &localp->sa, localp->len);
+#endif
}
pid = fork();