X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=win32%2Fwin32sck.c;h=3b81d8bcae73833b44af7c62eae32caef0890162;hb=22d4bb9ccb8701e68f9243547d7e3a3c55f70908;hp=f7d101bc8b8f5d48dad7bd34273b96d4f52aea1f;hpb=4b19af017623bfa3bb72bb164598a517f586e0d3;p=p5sagit%2Fp5-mst-13.2.git diff --git a/win32/win32sck.c b/win32/win32sck.c index f7d101b..3b81d8b 100644 --- a/win32/win32sck.c +++ b/win32/win32sck.c @@ -426,15 +426,27 @@ my_fclose (FILE *pf) if (!wsock_started) /* No WinSock? */ return(fclose(pf)); /* Then not a socket. */ osf = TO_SOCKET(fileno(pf));/* Get it now before it's gone! */ - if (osf != -1 - && closesocket(osf) == SOCKET_ERROR - && WSAGetLastError() != WSAENOTSOCK) - { - (void)fclose(pf); - return EOF; + if (osf != -1) { + int err; + win32_fflush(pf); + err = closesocket(osf); + if (err == 0) { +#if defined(USE_FIXED_OSFHANDLE) || defined(PERL_MSVCRT_READFIX) + _set_osfhnd(fileno(pf), INVALID_HANDLE_VALUE); +#endif + (void)fclose(pf); /* handle already closed, ignore error */ + return 0; + } + else if (err == SOCKET_ERROR) { + err = WSAGetLastError(); + if (err != WSAENOTSOCK) { + (void)fclose(pf); + errno = err; + return EOF; + } + } } - else - return fclose(pf); + return fclose(pf); } struct hostent *