X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;ds=sidebyside;f=utils%2Fmount%2Fnetwork.c;h=5a56c23ce20f9b9ca6333d9f1e08f837a8d18925;hb=7f8fae8cd60025f7fa1b446da363dcc2e1fb5b6a;hp=89cb976d0fda0309666853d6a7d3baf510827eea;hpb=1f5420e7ecb19022236dfe7eb54dea7d508c04c8;p=nfs-utils.git diff --git a/utils/mount/network.c b/utils/mount/network.c index 89cb976..5a56c23 100644 --- a/utils/mount/network.c +++ b/utils/mount/network.c @@ -210,9 +210,9 @@ out: } /* - * Create a socket that is locally bound to a reserved or non-reserved - * port. For any failures, RPC_ANYSOCK is returned which will cause - * the RPC code to create the socket instead. + * Create a socket that is locally bound to a reserved or non-reserved port. + * + * The caller should check rpc_createerr to determine the cause of any error. */ static int get_socket(struct sockaddr_in *saddr, unsigned int p_prot, unsigned int timeout, int resvp, int conn) @@ -310,19 +310,11 @@ static unsigned short getport(struct sockaddr_in *saddr, 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, PMAP_TIMEOUT, FALSE, FALSE); if (socket == RPC_ANYSOCK) { - if (proto == IPPROTO_TCP && errno == ETIMEDOUT) { - /* - * TCP SYN timed out, so exit now. - */ + if (proto == IPPROTO_TCP && + rpc_createerr.cf_error.re_errno == ETIMEDOUT) rpc_createerr.cf_stat = RPC_TIMEDOUT; - } return 0; } @@ -360,8 +352,7 @@ static unsigned short getport(struct sockaddr_in *saddr, else if (port == 0) rpc_createerr.cf_stat = RPC_PROGNOTREGISTERED; } - if (socket != 1) - close(socket); + close(socket); return port; } @@ -661,10 +652,10 @@ int clnt_ping(struct sockaddr_in *saddr, const unsigned long prog, static char clnt_res; struct sockaddr dissolve; - rpc_createerr.cf_stat = stat = errno = 0; + rpc_createerr.cf_stat = stat = 0; sock = get_socket(saddr, prot, CONNECT_TIMEOUT, FALSE, TRUE); if (sock == RPC_ANYSOCK) { - if (errno == ETIMEDOUT) { + if (rpc_createerr.cf_error.re_errno == ETIMEDOUT) { /* * TCP timeout. Bubble up the error to see * how it should be handled.