diff options
Diffstat (limited to 'rpc/rpc-transport/rdma/src/rdma.c')
-rw-r--r-- | rpc/rpc-transport/rdma/src/rdma.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/rpc/rpc-transport/rdma/src/rdma.c b/rpc/rpc-transport/rdma/src/rdma.c index d27beaf1c25..c0b7e7bf27f 100644 --- a/rpc/rpc-transport/rdma/src/rdma.c +++ b/rpc/rpc-transport/rdma/src/rdma.c @@ -4501,7 +4501,7 @@ rdma_connect (struct rpc_transport *this, int port) int32_t ret = 0; gf_boolean_t non_blocking = 1; - struct sockaddr_storage sockaddr; + union gf_sock_union sock_union; socklen_t sockaddr_len = 0; if (dict_get (options, "non-blocking-io")) { @@ -4517,7 +4517,7 @@ rdma_connect (struct rpc_transport *this, int port) } ret = gf_rdma_client_get_remote_sockaddr (this, - (struct sockaddr *)&sockaddr, + &sock_union.sa, &sockaddr_len, port); if (ret != 0) { gf_log (this->name, GF_LOG_DEBUG, @@ -4532,8 +4532,7 @@ rdma_connect (struct rpc_transport *this, int port) goto unlock; } - priv->sock = socket (((struct sockaddr *)&sockaddr)->sa_family, - SOCK_STREAM, 0); + priv->sock = socket (sock_union.sa.sa_family, SOCK_STREAM, 0); if (priv->sock == -1) { gf_log (this->name, GF_LOG_ERROR, @@ -4545,12 +4544,12 @@ rdma_connect (struct rpc_transport *this, int port) gf_log (this->name, GF_LOG_TRACE, "socket fd = %d", priv->sock); - memcpy (&this->peerinfo.sockaddr, &sockaddr, sockaddr_len); + memcpy (&this->peerinfo.sockaddr, &sock_union.storage, + sockaddr_len); this->peerinfo.sockaddr_len = sockaddr_len; if (port > 0) - ((struct sockaddr_in *) (&sockaddr))->sin_port - = htons (port); + sock_union.sin.sin_port = htons (port); ((struct sockaddr *) &this->myinfo.sockaddr)->sa_family = ((struct sockaddr *)&this->peerinfo.sockaddr)->sa_family; @@ -4713,15 +4712,15 @@ rdma_server_event_handler (int fd, int idx, void *data, static int32_t rdma_listen (rpc_transport_t *this) { - struct sockaddr_storage sockaddr; + union gf_sock_union sock_union; socklen_t sockaddr_len; rdma_private_t *priv = this->private; int opt = 1, ret = 0; char service[NI_MAXSERV], host[NI_MAXHOST]; - memset (&sockaddr, 0, sizeof (sockaddr)); + memset (&sock_union, 0, sizeof (sock_union)); ret = gf_rdma_server_get_local_sockaddr (this, - (struct sockaddr *)&sockaddr, + &sock_union.sa, &sockaddr_len); if (ret != 0) { gf_log (this->name, GF_LOG_DEBUG, @@ -4729,8 +4728,7 @@ rdma_listen (rpc_transport_t *this) goto err; } - priv->sock = socket (((struct sockaddr *)&sockaddr)->sa_family, - SOCK_STREAM, 0); + priv->sock = socket (sock_union.sa.sa_family, SOCK_STREAM, 0); if (priv->sock == -1) { gf_log ("rdma/server", GF_LOG_CRITICAL, "init: failed to create socket, error: %s", @@ -4740,7 +4738,7 @@ rdma_listen (rpc_transport_t *this) goto err; } - memcpy (&this->myinfo.sockaddr, &sockaddr, sockaddr_len); + memcpy (&this->myinfo.sockaddr, &sock_union.storage, sockaddr_len); this->myinfo.sockaddr_len = sockaddr_len; ret = getnameinfo ((struct sockaddr *)&this->myinfo.sockaddr, @@ -4756,9 +4754,7 @@ rdma_listen (rpc_transport_t *this) sprintf (this->myinfo.identifier, "%s:%s", host, service); setsockopt (priv->sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof (opt)); - if (bind (priv->sock, - (struct sockaddr *)&sockaddr, - sockaddr_len) != 0) { + if (bind (priv->sock, &sock_union.sa, sockaddr_len) != 0) { ret = -1; gf_log ("rdma/server", GF_LOG_ERROR, "init: failed to bind to socket for %s (%s)", |