From 2d85ef645f3048419d905cfc9da10a28885a6775 Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Wed, 27 Jan 2010 06:57:16 +0000 Subject: transport/socket: guess an appropriate address family when it is not specified in configuration. Signed-off-by: Raghavendra G Signed-off-by: Anand V. Avati BUG: 561 (with address family set to 'inet-sdp', transport/socket doesn't work correctly) URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=561 --- transport/socket/src/name.c | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) (limited to 'transport/socket/src/name.c') diff --git a/transport/socket/src/name.c b/transport/socket/src/name.c index 6a1a1b08a..3e965f0bb 100644 --- a/transport/socket/src/name.c +++ b/transport/socket/src/name.c @@ -463,16 +463,25 @@ client_bind (transport_t *this, int32_t socket_client_get_remote_sockaddr (transport_t *this, struct sockaddr *sockaddr, - socklen_t *sockaddr_len) + socklen_t *sockaddr_len, + sa_family_t *sa_family) { int32_t ret = 0; + if ((sockaddr == NULL) || (sockaddr_len == NULL) + || (sa_family == NULL)) { + ret = -1; + goto err; + } + ret = client_fill_address_family (this, &sockaddr->sa_family); if (ret) { ret = -1; goto err; } + *sa_family = sockaddr->sa_family; + switch (sockaddr->sa_family) { case AF_INET_SDP: @@ -481,11 +490,13 @@ socket_client_get_remote_sockaddr (transport_t *this, case AF_INET: case AF_INET6: case AF_UNSPEC: - ret = af_inet_client_get_remote_sockaddr (this, sockaddr, sockaddr_len); + ret = af_inet_client_get_remote_sockaddr (this, sockaddr, + sockaddr_len); break; case AF_UNIX: - ret = af_unix_client_get_remote_sockaddr (this, sockaddr, sockaddr_len); + ret = af_unix_client_get_remote_sockaddr (this, sockaddr, + sockaddr_len); break; default: @@ -494,6 +505,10 @@ socket_client_get_remote_sockaddr (transport_t *this, ret = -1; } + if (*sa_family == AF_UNSPEC) { + *sa_family = sockaddr->sa_family; + } + err: return ret; } @@ -542,17 +557,22 @@ out: } int32_t -socket_server_get_local_sockaddr (transport_t *this, - struct sockaddr *addr, - socklen_t *addr_len) +socket_server_get_local_sockaddr (transport_t *this, struct sockaddr *addr, + socklen_t *addr_len, sa_family_t *sa_family) { int32_t ret = -1; + if ((addr == NULL) || (addr_len == NULL) || (sa_family == NULL)) { + goto err; + } + ret = server_fill_address_family (this, &addr->sa_family); if (ret == -1) { goto err; } + *sa_family = addr->sa_family; + switch (addr->sa_family) { case AF_INET_SDP: @@ -569,6 +589,10 @@ socket_server_get_local_sockaddr (transport_t *this, break; } + if (*sa_family == AF_UNSPEC) { + *sa_family = addr->sa_family; + } + err: return ret; } -- cgit