Re: Fix Windows socket error checking for MinGW - Mailing list pgsql-hackers

From Andrew Dunstan
Subject Re: Fix Windows socket error checking for MinGW
Date
Msg-id 520FBB28.7070400@dunslane.net
Whole thread Raw
In response to Re: Fix Windows socket error checking for MinGW  (Noah Misch <noah@leadboat.com>)
Responses Re: Fix Windows socket error checking for MinGW  (Noah Misch <noah@leadboat.com>)
List pgsql-hackers
On 08/17/2013 01:16 AM, Noah Misch wrote:
> On Fri, Aug 16, 2013 at 06:56:45PM -0500, Michael Cronenworth wrote:
>> I started a thread on the general list so read that for more info.
>>
>> http://www.postgresql.org/message-id/520A6E55.40901@cchtml.com
>>
>> I'm also going to submit the patch to CommitFest.
>> +#ifndef WIN32
>>           if (SOCK_ERRNO == EWOULDBLOCK)
>> +#else
>> +        if (SOCK_ERRNO == WSAEWOULDBLOCK)
>> +#endif
> Thanks for looking into this.  I suspect this patch is achieving the right
> runtime behavior, but some cleanup is in order.  src/include/port/win32.h
> makes some effort to preempt the need for a patch like this, but the relevant
> code isn't used for MinGW:
>
> /*
>   * For Microsoft Visual Studio 2010 and above we intentionally redefine
>   * the regular Berkeley error constants and set them to the WSA constants.
>   * Note that this will break if those constants are used for anything else
>   * than Windows Sockets errors.
>   */
> #if _MSC_VER >= 1600
> #pragma warning(disable:4005)
> #define EMSGSIZE WSAEMSGSIZE
> #define EAFNOSUPPORT WSAEAFNOSUPPORT
> #define EWOULDBLOCK WSAEWOULDBLOCK
> #define EPROTONOSUPPORT WSAEPROTONOSUPPORT
> #define ECONNRESET WSAECONNRESET
> #define EINPROGRESS WSAEINPROGRESS
> #define ENOBUFS WSAENOBUFS
> #define ECONNREFUSED WSAECONNREFUSED
> #define EOPNOTSUPP WSAEOPNOTSUPP
> #pragma warning(default:4005)
> #endif
>
> I suspect we should do one of the following:
>
> 1. Redefine those constants for more (all?) compilers.
> 2. Remove that block and put #ifdef around all usage of such constants in
> frontend code, as you have done.
> 3. Remove that block and make src/backend/port/win32/socket.c frontend-usable,
> so frontend code can treat errno like backend code treats errno.
>
> What do you recommend?
>


We don't seem to have a problem with this on native builds, only on 
cross-compiles AFAIK (see buildfarm for proof). The native mingw-w64 
build works just fine. So my first question is going to be why is the 
cross-compile different?


cheers

andrew



pgsql-hackers by date:

Previous
From: Robert Haas
Date:
Subject: Re: dynamic background workers, round two
Next
From: Peter Geoghegan
Date:
Subject: Re: Chinese in Postgres