diff options
Diffstat (limited to 'rpc/rpc-transport/socket/src/socket.c')
-rw-r--r-- | rpc/rpc-transport/socket/src/socket.c | 12 |
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 |