On Monday 16 July 2012 12:12:24 Alon Bar-Lev wrote:
> On Mon, Jul 16, 2012 at 11:39 AM, Heiko Hund <heiko.h...@sophos.com> wrote:
> > On Friday 13 July 2012 20:00:49 Alon Bar-Lev wrote:
> >> In my projects I always compare to the two values EWOULDBLOCK and
> >> EINPROGRESS and it works without much conditionals.
> >> 
> >> So simply do:
> >> ---
> >> 
> >>   if (status == EINPROGRESS || status == EWOULDBLOCK)
> > 
> > While this surly compiles with mingw, I don't think it works as intended,
> > as the numerical values of the constants differ:
> >         #define EWOULDBLOCK 140       (errno.h)
> >         #define WSAEWOULDBLOCK 10035L (winerror.h)
> > 
> > The error returned from WinSock2 is really 10035 in case of a unfinished
> > non- blocking connect.
> 
> That's correct.... and applies to all winsock errors in this case:
> ---
> #define WSAEWOULDBLOCK 10035L
> #define WSAEINPROGRESS 10036L
> ---
> 
> It depends if you take error from errno or from
> GetLastError()/WSAGetLastError().

I wonder if GetLastError() works reliably with WinSock2 operations as 
msdn.microsoft.com/en-us/library/windows/desktop/ms737828%28v=vs.85%29.aspx 
and
msdn.microsoft.com/en-us/library/windows/desktop/ms737625%28v=vs.85%29.aspx do 
explicitly state to use WSAGetLastError(). Maybe it only breaks with 
multithreaded applications?!

Heiko
-- 
Heiko Hund | Sr. Software Engineer | Tel +49-721-25516-237 | Fax -200
SOPHOS NSG | Amalienbadstr. 41 Bau 52 | 76227 Karlsruhe | Germany


Reply via email to