summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
authorwpaul <wpaul@FreeBSD.org>1995-08-02 09:14:23 +0000
committerwpaul <wpaul@FreeBSD.org>1995-08-02 09:14:23 +0000
commit6c6079a3a0c3fb2088b7d61a4abfc3c9a4a01500 (patch)
tree07e75ad725593b5807081ddf20183c804a68a82e /lib/libc
parentb5a04815104ca32e7292221d2619a223b5584472 (diff)
downloadFreeBSD-src-6c6079a3a0c3fb2088b7d61a4abfc3c9a4a01500.zip
FreeBSD-src-6c6079a3a0c3fb2088b7d61a4abfc3c9a4a01500.tar.gz
Reviewed by: David Greenman
Back out the 'help NIS rebind faster' hack. This change used a connect()/send() pair rather than the original sendto() to allow RPC to pass ICMP host unreachable and similar errors up to RPC programs that use UDP. This is not a terrible thing by itself, but it can cause trouble in environments with multi-homed hosts: if the portmapper on the multi-homed machine sends a reply with a source address that's different than the one associated with the connection by connect(), the kernel will send a port unreachable message and drop the reply. For the sake of compatibility with everybody else on the planet, it's best to revert to the old behavior. *long, heavy sigh*
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/rpc/clnt_udp.c18
1 files changed, 4 insertions, 14 deletions
diff --git a/lib/libc/rpc/clnt_udp.c b/lib/libc/rpc/clnt_udp.c
index 0286726..5c51fad 100644
--- a/lib/libc/rpc/clnt_udp.c
+++ b/lib/libc/rpc/clnt_udp.c
@@ -30,7 +30,7 @@
#if defined(LIBC_SCCS) && !defined(lint)
/*static char *sccsid = "from: @(#)clnt_udp.c 1.39 87/08/11 Copyr 1984 Sun Micro";*/
/*static char *sccsid = "from: @(#)clnt_udp.c 2.2 88/08/01 4.0 RPCSRC";*/
-static char *rcsid = "$Id: clnt_udp.c,v 1.2 1995/04/02 20:05:20 wpaul Exp $";
+static char *rcsid = "$Id: clnt_udp.c,v 1.3 1995/05/30 05:41:19 rgrimes Exp $";
#endif
/*
@@ -258,20 +258,10 @@ call_again:
return (cu->cu_error.re_status = RPC_CANTENCODEARGS);
outlen = (int)XDR_GETPOS(xdrs);
- /*
- * Give error (ECONNREFUSED/EHOSTUNREACH) instead of timeout.
- * Gives much faster NIS rebinding.
- * Errors are not detected here, but in the recvfrom()
- * following the select().
- */
- if (connect(cu->cu_sock, (struct sockaddr *)(&cu->cu_raddr),
- cu->cu_rlen) != 0) {
- cu->cu_error.re_errno = errno;
- return (cu->cu_error.re_status = RPC_CANTSEND);
- }
-
send_again:
- if (send(cu->cu_sock, cu->cu_outbuf, outlen, 0) != outlen) {
+ if (sendto(cu->cu_sock, cu->cu_outbuf, outlen, 0,
+ (struct sockaddr *)&(cu->cu_raddr), cu->cu_rlen)
+ != outlen) {
cu->cu_error.re_errno = errno;
return (cu->cu_error.re_status = RPC_CANTSEND);
}
OpenPOWER on IntegriCloud