[ovs-dev] [PATCH 08/17] test-vconn: Change the expected error for Windows.

Gurucharan Shetty shettyg at nicira.com
Tue Jul 1 17:58:20 UTC 2014


On Mon, Jun 30, 2014 at 10:20 AM, Ben Pfaff <blp at nicira.com> wrote:
> On Mon, Jun 30, 2014 at 10:13:54AM -0700, Gurucharan Shetty wrote:
>> On Thu, Jun 26, 2014 at 1:26 PM, Ben Pfaff <blp at nicira.com> wrote:
>> > On Tue, Jun 24, 2014 at 11:52:54AM -0700, Gurucharan Shetty wrote:
>> >> On Windows ECONNRESET is WSAECONNRESET.
>> >>
>> >> Also, "unix" connections are done through TCP sockets.
>> >> For the 'refuse-connection' test, the error message for Windows
>> >> is WSAECONNRESET instead of EPIPE.
>> >>
>> >> Signed-off-by: Gurucharan Shetty <gshetty at nicira.com>
>> >
>> > I'm a little confused about why Windows has error codes like ECONNRESET
>> > if it never uses them.  Is there any reason not to add something like
>> Currently, Windows has kept errno.h constants separate from winsock2
>> error constants. The WinSock error values are the BSD error values
>> with a "WinSock API base" error (WSABASEERR) value added to each of
>> them.
>>
>> http://msdn.microsoft.com/en-us/library/windows/desktop/ms737828(v=vs.85).aspx
>>
>> Though one can possibly do as you suggest below (apparently it was the
>> default a few years ago), Microsoft now recommends against doing it
>> for possible conflicts. In case of ECONNRESET, there is probably no
>> issues in doing what you suggest.
>
> Hmm.
>
> Here is another possibility.  We have this sock_errno() function that
> all checks for socket errnos must go through.  Can it detect that the
> value is a WSA* and subtract WSABASEERR to transform it into a standard
> error code?
I was wrong when I previously said "The WinSock error values are the
BSD error values with a "WinSock API base" error (WSABASEERR) value
added to each of them."
So, the above solution wouldn't work. I only realized it after
implementing the above suggestion. I misunderstood the intent of
WSABASEERR while reading the header file.

So the question is should we handle the case of ECONNRESET as a
one-off thing and handle it separately like you suggested. i.e.,
#if _WIN32
#undef ECONNRESET
#define ECONNRESET WSAECONNRESET
#endif



More information about the dev mailing list