diff options
Diffstat (limited to 'rpc')
-rw-r--r-- | rpc/rpc-lib/src/rpcsvc.c | 61 | ||||
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 4 |
2 files changed, 24 insertions, 41 deletions
diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c index daf1932b90d..b0eea194347 100644 --- a/rpc/rpc-lib/src/rpcsvc.c +++ b/rpc/rpc-lib/src/rpcsvc.c @@ -1584,43 +1584,6 @@ rpcsvc_transport_peeraddr (rpc_transport_t *trans, char *addrstr, int addrlen, sasize); } - -rpc_transport_t * -rpcsvc_transport_create (rpcsvc_t *svc, dict_t *options, char *name) -{ - int ret = -1; - rpc_transport_t *trans = NULL; - - trans = rpc_transport_load (svc->ctx, options, name); - if (!trans) { - gf_log (GF_RPCSVC, GF_LOG_WARNING, "cannot create listener, " - "initing the transport failed"); - goto out; - } - - ret = rpc_transport_listen (trans); - if (ret == -1) { - gf_log (GF_RPCSVC, GF_LOG_WARNING, - "listening on transport failed"); - goto out; - } - - ret = rpc_transport_register_notify (trans, rpcsvc_notify, svc); - if (ret == -1) { - gf_log (GF_RPCSVC, GF_LOG_WARNING, "registering notify failed"); - goto out; - } - - ret = 0; -out: - if ((ret == -1) && (trans)) { - rpc_transport_disconnect (trans); - trans = NULL; - } - - return trans; -} - rpcsvc_listener_t * rpcsvc_listener_alloc (rpcsvc_t *svc, rpc_transport_t *trans) { @@ -1658,9 +1621,23 @@ rpcsvc_create_listener (rpcsvc_t *svc, dict_t *options, char *name) goto out; } - trans = rpcsvc_transport_create (svc, options, name); + trans = rpc_transport_load (svc->ctx, options, name); if (!trans) { - /* LOG TODO */ + gf_log (GF_RPCSVC, GF_LOG_WARNING, "cannot create listener, " + "initing the transport failed"); + goto out; + } + + ret = rpc_transport_listen (trans); + if (ret == -EADDRINUSE || ret == -1) { + gf_log (GF_RPCSVC, GF_LOG_WARNING, + "listening on transport failed"); + goto out; + } + + ret = rpc_transport_register_notify (trans, rpcsvc_notify, svc); + if (ret == -1) { + gf_log (GF_RPCSVC, GF_LOG_WARNING, "registering notify failed"); goto out; } @@ -1763,7 +1740,11 @@ out: GF_FREE (transport_name); - return count; + if (count > 0) { + return count; + } else { + return ret; + } } diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c index 74b9dd26681..0752fee9575 100644 --- a/rpc/rpc-transport/socket/src/socket.c +++ b/rpc/rpc-transport/socket/src/socket.c @@ -883,6 +883,8 @@ __socket_server_bind (rpc_transport_t *this) if (errno == EADDRINUSE) { gf_log (this->name, GF_LOG_ERROR, "Port is already in use"); + + ret = -EADDRINUSE; } } @@ -3354,7 +3356,7 @@ socket_listen (rpc_transport_t *this) ret = __socket_server_bind (this); - if (ret == -1) { + if ((ret == -EADDRINUSE) || (ret == -1)) { /* logged inside __socket_server_bind() */ close (priv->sock); priv->sock = -1; |