summaryrefslogtreecommitdiffstats
path: root/rpc/rpc-transport/socket/src/socket.c
diff options
context:
space:
mode:
Diffstat (limited to 'rpc/rpc-transport/socket/src/socket.c')
-rw-r--r--rpc/rpc-transport/socket/src/socket.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/rpc/rpc-transport/socket/src/socket.c b/rpc/rpc-transport/socket/src/socket.c
index e969a5cf7fd..78e1b147c33 100644
--- a/rpc/rpc-transport/socket/src/socket.c
+++ b/rpc/rpc-transport/socket/src/socket.c
@@ -2744,6 +2744,7 @@ socket_connect (rpc_transport_t *this, int port)
socket_connect_error_state_t *arg = NULL;
pthread_t th_id = {0, };
char *cname = NULL;
+ gf_boolean_t ign_enoent = _gf_false;
GF_VALIDATE_OR_GOTO ("socket", this, err);
GF_VALIDATE_OR_GOTO ("socket", this->private, err);
@@ -2863,6 +2864,10 @@ socket_connect (rpc_transport_t *this, int port)
&(addr->sin_addr.s_addr));
}
+ /* If client wants ENOENT to be ignored */
+ ign_enoent = dict_get_str_boolean (this->options,
+ "transport.socket.ignore-enoent", _gf_false);
+
ret = client_bind (this, SA (&this->myinfo.sockaddr),
&this->myinfo.sockaddr_len, priv->sock);
if (ret == -1) {
@@ -2884,6 +2889,13 @@ socket_connect (rpc_transport_t *this, int port)
ret = connect (priv->sock, SA (&this->peerinfo.sockaddr),
this->peerinfo.sockaddr_len);
+ if (ret == -1 && errno == ENOENT && ign_enoent) {
+ gf_log (this->name, GF_LOG_WARNING,
+ "Ignore failed connection attempt on %s, (%s) ",
+ this->peerinfo.identifier, strerror (errno));
+ goto handler;
+ }
+
if (ret == -1 && ((errno != EINPROGRESS) && (errno != ENOENT))) {
/* For unix path based sockets, the socket path is
* cryptic (md5sum of path) and may not be useful for