summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
a3c8371)
If get_socket() can't get us an open TCP socket, we know the server is
down, so make getport() exit early instead of hanging. This logic is
copied from clnt_ping().
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Neil Brown <neilb@suse.de>
struct pmap parms;
enum clnt_stat stat;
struct pmap parms;
enum clnt_stat stat;
- saddr->sin_port = htons (PMAPPORT);
- socket = get_socket(saddr, prot, FALSE, FALSE);
+ saddr->sin_port = htons(PMAPPORT);
+
+ /*
+ * Try to get a socket with a non-privileged port.
+ * clnt*create() will create one anyway if this
+ * fails.
+ */
+ socket = get_socket(saddr, proto, FALSE, FALSE);
+ if (socket == RPC_ANYSOCK) {
+ if (proto == IPPROTO_TCP && errno == ETIMEDOUT) {
+ /*
+ * TCP SYN timed out, so exit now.
+ */
+ rpc_createerr.cf_stat = RPC_TIMEDOUT;
+ }
+ return 0;
+ }
switch (prot) {
case IPPROTO_UDP:
switch (prot) {
case IPPROTO_UDP: