diff options
| author | Raghavendra G <raghavendra@gluster.com> | 2010-01-27 06:57:16 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2010-01-28 06:11:41 -0800 | 
| commit | 2d85ef645f3048419d905cfc9da10a28885a6775 (patch) | |
| tree | a59e601206554d8cd20555812d45a646a2b0a848 /transport/socket/src/name.c | |
| parent | 6b8435359140cb08f9580a4a304ab4a070452f8f (diff) | |
transport/socket: guess an appropriate address family when it is not specified in configuration.v2.0.10rc1
Signed-off-by: Raghavendra G <raghavendra@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
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
Diffstat (limited to 'transport/socket/src/name.c')
| -rw-r--r-- | transport/socket/src/name.c | 36 | 
1 files changed, 30 insertions, 6 deletions
diff --git a/transport/socket/src/name.c b/transport/socket/src/name.c index 6a1a1b08afc..3e965f0bbe8 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;  }  | 
