summaryrefslogtreecommitdiffstats
path: root/rpc
diff options
context:
space:
mode:
Diffstat (limited to 'rpc')
-rw-r--r--rpc/rpc-lib/src/rpc-transport.h5
-rw-r--r--rpc/rpc-transport/socket/src/socket.c2
2 files changed, 7 insertions, 0 deletions
diff --git a/rpc/rpc-lib/src/rpc-transport.h b/rpc/rpc-lib/src/rpc-transport.h
index e3b630e2919..ff6567c198e 100644
--- a/rpc/rpc-lib/src/rpc-transport.h
+++ b/rpc/rpc-lib/src/rpc-transport.h
@@ -212,6 +212,11 @@ struct rpc_transport {
char *ssl_name;
dict_t *clnt_options; /* store options received from
* client */
+ /* connect_failed: saves the connect() syscall status as socket_t
+ * member holding connect() status can't be accessed by higher gfapi
+ * layer or in client management notification handler functions
+ */
+ gf_boolean_t connect_failed;
};
struct rpc_transport_ops {
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index 0ee75951207..d062cbbc4fb 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -3146,6 +3146,7 @@ socket_connect (rpc_transport_t *this, int port)
}
}
+ this->connect_failed = _gf_false;
if (ign_enoent) {
ret = connect_loop (priv->sock,
SA (&this->peerinfo.sockaddr),
@@ -3169,6 +3170,7 @@ socket_connect (rpc_transport_t *this, int port)
/* TBD: What about ENOENT, we will do getsockopt there
as well, so how is that exempt from such a problem? */
priv->connect_failed = 1;
+ this->connect_failed = _gf_true;
goto handler;
}