Re: Winsock error 10035 while trying to upgrade from 8.0 to 8.2 - Mailing list pgsql-general

From Cyril VELTER
Subject Re: Winsock error 10035 while trying to upgrade from 8.0 to 8.2
Date
Msg-id 0-39227343642-2674-1819306@CFGEM
Whole thread Raw
In response to Re: [Re] Re: [Re] Re: Winsock error 10035 while trying to upgrade from 8.0 to 8.2  (Magnus Hagander <magnus@hagander.net>)
Responses Re: Winsock error 10035 while trying to upgrade from 8.0 to 8.2
List pgsql-general

> > Cyril VELTER wrote:
>
> >
> > >     Searching the source files, it seems the error message is generated in
> > > port/win32/socket.c line 594.
> >
> > Right, but the important thing is which path down to that function is it
> > generated in. Which is why a backtrace would help.
>
>     Yes, I understand that.
>
> >
> > Looking at the code, the problem is probably somewhere in
> > pgwin32_recv(). Now, it really shouldn't end up doing what you're
> > seeing, but obviously it is.
>
>
>     After looking at the code of pgwin32_recv(), I don't understand why
> pgwin32_waitforsinglesocket() is called with the FD_ACCEPT argument.
>
> >
> > Perhaps we just need to have it retry if it gets the WSAEWOULDBLOCK?
> > Thoughts?
>
>     I've modified pgwin32_recv() to do that (repeat the
> pgwin32_waitforsinglesocket() / WSARecv while the error is WSAEWOULDBLOCK and


> not raising this error. I've an upgrade running right now (I will have the
> result in the next hours).


    Replying to myself, the upgrade is not finished yet, but I can confirm that
there is cases where pgwin32_waitforsinglesocket() return and the WSARecv
immediatly fail. I-ve modified the end of pgwin32_recv() :


    /* No error, zero bytes (win2000+) or error+WSAEWOULDBLOCK (<=nt4) */

    for(;;) {
        if (pgwin32_waitforsinglesocket(s, FD_READ | FD_CLOSE | FD_ACCEPT,
                                        INFINITE) == 0)
            return -1;

        r = WSARecv(s, &wbuf, 1, &b, &flags, NULL, NULL);
        if (r == SOCKET_ERROR)
        {
            printf("SOCKERROR");
            if (WSAGetLastError() != WSAEWOULDBLOCK)
            {
                TranslateSocketError();
                return -1;
            }
        }
        else
        {
            return b;
        }
    }


    The printf("SOCKERROR") line have been hit two times.

    Any though ?

    Once this upgrade is finished, I will make another try removing FD_ACCEPT from

the pgwin32_waitforsinglesocket() call.


    cyril


pgsql-general by date:

Previous
From: PFC
Date:
Subject: Re: index vs. seq scan choice?
Next
From: Tom Allison
Date:
Subject: Re: why postgresql over other RDBMS