diff options
Diffstat (limited to 'support/nfs/rpc_socket.c')
-rw-r--r-- | support/nfs/rpc_socket.c | 68 |
1 files changed, 20 insertions, 48 deletions
diff --git a/support/nfs/rpc_socket.c b/support/nfs/rpc_socket.c index 7896cd2..2900d18 100644 --- a/support/nfs/rpc_socket.c +++ b/support/nfs/rpc_socket.c @@ -106,36 +106,6 @@ static CLIENT *nfs_get_localclient(const struct sockaddr *sap, return client; } -/* - * Bind a socket using an unused ephemeral source port. - * - * Returns zero on success, or returns -1 on error. errno is - * set to reflect the nature of the error. - */ -static int nfs_bind(const int sock, const sa_family_t family) -{ - struct sockaddr_in sin = { - .sin_family = AF_INET, - .sin_addr.s_addr = htonl(INADDR_ANY), - }; - struct sockaddr_in6 sin6 = { - .sin6_family = AF_INET6, - .sin6_addr = IN6ADDR_ANY_INIT, - }; - - switch (family) { - case AF_INET: - return bind(sock, (struct sockaddr *)(char *)&sin, - (socklen_t)sizeof(sin)); - case AF_INET6: - return bind(sock, (struct sockaddr *)(char *)&sin6, - (socklen_t)sizeof(sin6)); - } - - errno = EAFNOSUPPORT; - return -1; -} - #ifdef HAVE_LIBTIRPC /* @@ -276,7 +246,8 @@ static CLIENT *nfs_get_udpclient(const struct sockaddr *sap, const int resvport) { CLIENT *client; - int ret, sock; + int ret = 0; + int sock = 0; #ifdef HAVE_LIBTIRPC struct sockaddr_storage address; const struct netbuf nbuf = { @@ -300,15 +271,15 @@ static CLIENT *nfs_get_udpclient(const struct sockaddr *sap, return NULL; } - if (resvport) + if (resvport) { ret = nfs_bindresvport(sock, sap->sa_family); - else - ret = nfs_bind(sock, sap->sa_family); - if (ret < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; - (void)close(sock); - return NULL; + + if (ret < 0) { + rpc_createerr.cf_stat = RPC_SYSTEMERROR; + rpc_createerr.cf_error.re_errno = errno; + (void)close(sock); + return NULL; + } } if (timeout->tv_sec == -1) @@ -358,7 +329,8 @@ static CLIENT *nfs_get_tcpclient(const struct sockaddr *sap, const int resvport) { CLIENT *client; - int ret, sock; + int ret = 0; + int sock = 0; #ifdef HAVE_LIBTIRPC struct sockaddr_storage address; const struct netbuf nbuf = { @@ -382,15 +354,15 @@ static CLIENT *nfs_get_tcpclient(const struct sockaddr *sap, return NULL; } - if (resvport) + if (resvport) { ret = nfs_bindresvport(sock, sap->sa_family); - else - ret = nfs_bind(sock, sap->sa_family); - if (ret < 0) { - rpc_createerr.cf_stat = RPC_SYSTEMERROR; - rpc_createerr.cf_error.re_errno = errno; - (void)close(sock); - return NULL; + + if (ret < 0) { + rpc_createerr.cf_stat = RPC_SYSTEMERROR; + rpc_createerr.cf_error.re_errno = errno; + (void)close(sock); + return NULL; + } } if (timeout->tv_sec == -1) |