<div dir="ltr"><p class="MsoNormal" style="color:rgb(80,0,80)">Hello all,<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">I was experiencing problems connecting to my PG backends<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">I started debugging and I found, in <b>src/protocol/pool_connection_pool.c</b>, the following<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">In function <b>connect_with_timeout</b>, after <b>if (connect(fd, walk->ai_addr, walk->ai_addrlen) < 0)<u></u><u></u></b></p><p class="MsoNormal" style="color:rgb(80,0,80)">The errno variable was quickly set to zero<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">I was getting the value <b>EINPROGRESS</b>, but by the time the following code was executed,<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><b>if ((errno != EINPROGRESS) && (errno != EALREADY))<u></u><u></u></b></p><p class="MsoNormal" style="color:rgb(80,0,80)"><b>                        {…}<u></u><u></u></b></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><b>errno</b> was already zero<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">So, I assigned <b>errno</b> to a <b>int error</b> variable and used that one instead of <b>errno</b>, which solved the problem<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">Any ideas why <b>errno</b> can change to zero between the connect() call and the <b>if ((errno != EINPROGRESS) && (errno != EALREADY))</b> line?<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                if (connect(fd, walk->ai_addr, walk->ai_addrlen) < 0)<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                {<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        int errno2 = errno;<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        if (errno2 == EISCONN)<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        {<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                                /* Socket is already connected */<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                                break;<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        }<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        if ((errno2 == EINTR && retry) || errno2 == EAGAIN)<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                                continue;<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        /*<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                         * If error was "connect(2) is in progress", then wait for<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                         * completion.  Otherwise error out.<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                         */<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        if ((errno2 != EINPROGRESS) && (errno2 != EALREADY))<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        {<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                                ereport(LOG,<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                                                (errmsg("failed to connect to PostgreSQL server on 2 \"%s:%d\"", host, port),<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                                                 errdetail("%m")));<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                                return false;<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">                        }<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)"><u></u> <u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">Regards,<u></u><u></u></p><p class="MsoNormal" style="color:rgb(80,0,80)">Martin</p></div>