diff options
Diffstat (limited to 'rpc/rpc-transport/socket')
| -rw-r--r-- | rpc/rpc-transport/socket/src/name.c | 8 | ||||
| -rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 25 |
2 files changed, 24 insertions, 9 deletions
diff --git a/rpc/rpc-transport/socket/src/name.c b/rpc/rpc-transport/socket/src/name.c index 3194a7cf369..39c0530b08e 100644 --- a/rpc/rpc-transport/socket/src/name.c +++ b/rpc/rpc-transport/socket/src/name.c @@ -357,7 +357,7 @@ af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr, { struct addrinfo hints, *res = 0, *rp = NULL; data_t *listen_port_data = NULL, *listen_host_data = NULL; - uint16_t listen_port = -1; + uint16_t listen_port = 0; char service[NI_MAXSERV], *listen_host = NULL; dict_t *options = NULL; int32_t ret = 0; @@ -365,15 +365,11 @@ af_inet_server_get_local_sockaddr(rpc_transport_t *this, struct sockaddr *addr, options = this->options; listen_port_data = dict_get(options, "transport.socket.listen-port"); - listen_host_data = dict_get(options, "transport.socket.bind-address"); - if (listen_port_data) { listen_port = data_to_uint16(listen_port_data); } - if (listen_port == (uint16_t)-1) - listen_port = GF_DEFAULT_SOCKET_LISTEN_PORT; - + listen_host_data = dict_get(options, "transport.socket.bind-address"); if (listen_host_data) { listen_host = data_to_str(listen_host_data); } else { diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index dd3e1e91992..06b5af2e5b2 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -861,15 +861,19 @@ static int __socket_server_bind(rpc_transport_t *this) { socket_private_t *priv = NULL; + glusterfs_ctx_t *ctx = NULL; + cmd_args_t *cmd_args = NULL; + struct sockaddr_storage unix_addr = {0}; int ret = -1; int opt = 1; int reuse_check_sock = -1; - struct sockaddr_storage unix_addr = {0}; GF_VALIDATE_OR_GOTO("socket", this, out); GF_VALIDATE_OR_GOTO("socket", this->private, out); priv = this->private; + ctx = this->ctx; + cmd_args = &ctx->cmd_args; ret = setsockopt(priv->sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); @@ -901,8 +905,23 @@ __socket_server_bind(rpc_transport_t *this) this->myinfo.identifier, strerror(errno)); if (errno == EADDRINUSE) { gf_log(this->name, GF_LOG_ERROR, "Port is already in use"); - - ret = -EADDRINUSE; + } + } + if (AF_UNIX != SA(&this->myinfo.sockaddr)->sa_family) { + if (getsockname(priv->sock, SA(&this->myinfo.sockaddr), + &this->myinfo.sockaddr_len) == -1) { + gf_log(this->name, GF_LOG_WARNING, + "getsockname on (%d) failed (%s)", priv->sock, + strerror(errno)); + ret = -1; + goto out; + } + if (!cmd_args->brick_port) { + cmd_args->brick_port = (int)ntohs( + ((struct sockaddr_in *)&this->myinfo.sockaddr)->sin_port); + gf_log(this->name, GF_LOG_INFO, + "process started listening on port (%d)", + cmd_args->brick_port); } } |
