@@ -243,30 +243,34 @@ static int MtmConnectSocket(char const* host, int port, int max_attempts)
243243if (!MtmResolveHostByName (host ,addrs ,& n_addrs )) {
244244elog (ERROR ,"Arbiter failed to resolve host '%s' by name" ,host );
245245}
246- Retry :
247- sd = socket (AF_INET ,SOCK_STREAM ,0 );
248- if (sd < 0 ) {
249- elog (ERROR ,"Arbiter failed to create socket: %d" ,errno );
250- }
246+
247+ Retry :
248+
251249while (1 ) {
252250int rc = -1 ;
251+
252+ sd = socket (AF_INET ,SOCK_STREAM ,0 );
253+ if (sd < 0 ) {
254+ elog (ERROR ,"Arbiter failed to create socket: %d" ,errno );
255+ }
253256for (i = 0 ;i < n_addrs ;++ i ) {
254257memcpy (& sock_inet .sin_addr ,& addrs [i ],sizeof sock_inet .sin_addr );
255258do {
256259rc = connect (sd , (struct sockaddr * )& sock_inet ,sizeof (sock_inet ));
257260}while (rc < 0 && errno == EINTR );
258-
261+
259262if (rc >=0 || errno == EINPROGRESS ) {
260263break ;
261264}
262265}
263266if (rc < 0 ) {
264267if ((errno != ENOENT && errno != ECONNREFUSED && errno != EINPROGRESS )|| max_attempts == 0 ) {
265- elog (WARNING ,"Arbiter failed to connect to %s:%d: %d" ,host ,port ,errno );
268+ elog (WARNING ,"Arbiter failed to connect to %s:%d:error= %d" ,host ,port ,errno );
266269return -1 ;
267270}else {
268271max_attempts -= 1 ;
269- MtmSleep (MtmConnectTimeout );
272+ elog (WARNING ,"Arbiter trying to connect to %s:%d: error=%d" ,host ,port ,errno );
273+ MtmSleep (5 * MtmConnectTimeout );
270274}
271275continue ;
272276}else {