diff --git a/guide/basic.cc b/guide/basic.cc index 803ce7466..a9a729170 100644 --- a/guide/basic.cc +++ b/guide/basic.cc @@ -5,6 +5,8 @@ * * \author Tianqi Chen */ +#define _CRT_SECURE_NO_WARNINGS +#define _CRT_SECURE_NO_DEPRECATE #include #include using namespace rabit; diff --git a/src/allreduce_base.cc b/src/allreduce_base.cc index 964738b34..549be729c 100644 --- a/src/allreduce_base.cc +++ b/src/allreduce_base.cc @@ -513,7 +513,7 @@ AllreduceBase::TryAllreduceTree(void *sendrecvbuf_, if (len != -1) { size_up_out += static_cast(len); } else { - ReturnType ret = Errno2Return(errno); + ReturnType ret = Errno2Return(); if (ret != kSuccess) { return ReportError(&links[parent_index], ret); } @@ -533,7 +533,7 @@ AllreduceBase::TryAllreduceTree(void *sendrecvbuf_, utils::Assert(size_down_in <= size_up_out, "Allreduce: boundary error"); } else { - ReturnType ret = Errno2Return(errno); + ReturnType ret = Errno2Return(); if (ret != kSuccess) { return ReportError(&links[parent_index], ret); } @@ -709,7 +709,7 @@ AllreduceBase::TryAllgatherRing(void *sendrecvbuf_, size_t total_size, if (len != -1) { read_ptr += static_cast(len); } else { - ReturnType ret = Errno2Return(errno); + ReturnType ret = Errno2Return(); if (ret != kSuccess) return ReportError(&next, ret); } } @@ -723,7 +723,7 @@ AllreduceBase::TryAllgatherRing(void *sendrecvbuf_, size_t total_size, if (len != -1) { write_ptr += static_cast(len); } else { - ReturnType ret = Errno2Return(errno); + ReturnType ret = Errno2Return(); if (ret != kSuccess) return ReportError(&prev, ret); } } @@ -826,7 +826,7 @@ AllreduceBase::TryReduceScatterRing(void *sendrecvbuf_, if (len != -1) { write_ptr += static_cast(len); } else { - ReturnType ret = Errno2Return(errno); + ReturnType ret = Errno2Return(); if (ret != kSuccess) return ReportError(&prev, ret); } } diff --git a/src/allreduce_base.h b/src/allreduce_base.h index 92aa849c8..53939925e 100644 --- a/src/allreduce_base.h +++ b/src/allreduce_base.h @@ -234,8 +234,13 @@ class AllreduceBase : public IEngine { } }; /*! \brief translate errno to return type */ - inline static ReturnType Errno2Return(int errsv) { - if (errsv == EAGAIN || errsv == EWOULDBLOCK) return kSuccess; + inline static ReturnType Errno2Return() { + int errsv = utils::Socket::GetLastError(); + if (errsv == EAGAIN || errsv == EWOULDBLOCK || errsv == 0) return kSuccess; +#ifdef _WIN32 + if (errsv == WSAEWOULDBLOCK) return kSuccess; + if (errsv == WSAECONNRESET) return kConnReset; +#endif if (errsv == ECONNRESET) return kConnReset; return kSockError; } @@ -299,7 +304,7 @@ class AllreduceBase : public IEngine { if (len == 0) { sock.Close(); return kRecvZeroLen; } - if (len == -1) return Errno2Return(errno); + if (len == -1) return Errno2Return(); size_read += static_cast(len); return kSuccess; } @@ -318,7 +323,7 @@ class AllreduceBase : public IEngine { if (len == 0) { sock.Close(); return kRecvZeroLen; } - if (len == -1) return Errno2Return(errno); + if (len == -1) return Errno2Return(); size_read += static_cast(len); return kSuccess; } @@ -331,7 +336,7 @@ class AllreduceBase : public IEngine { inline ReturnType WriteFromArray(const void *sendbuf_, size_t max_size) { const char *p = static_cast(sendbuf_); ssize_t len = sock.Send(p + size_write, max_size - size_write); - if (len == -1) return Errno2Return(errno); + if (len == -1) return Errno2Return(); size_write += static_cast(len); return kSuccess; } diff --git a/src/allreduce_robust.cc b/src/allreduce_robust.cc index 339603498..bfaca1938 100644 --- a/src/allreduce_robust.cc +++ b/src/allreduce_robust.cc @@ -691,7 +691,7 @@ AllreduceRobust::TryRecoverData(RecoverType role, if (len != -1) { links[i].size_write += len; } else { - ReturnType ret = Errno2Return(errno); + ReturnType ret = Errno2Return(); if (ret != kSuccess) return ReportError(&links[i], ret); } } @@ -1161,7 +1161,7 @@ AllreduceRobust::RingPassing(void *sendrecvbuf_, if (len != -1) { read_ptr += static_cast(len); } else { - ReturnType ret = Errno2Return(errno); + ReturnType ret = Errno2Return(); if (ret != kSuccess) return ReportError(&prev, ret); } } @@ -1171,7 +1171,7 @@ AllreduceRobust::RingPassing(void *sendrecvbuf_, if (len != -1) { write_ptr += static_cast(len); } else { - ReturnType ret = Errno2Return(errno); + ReturnType ret = Errno2Return(); if (ret != kSuccess) return ReportError(&prev, ret); } } diff --git a/src/socket.h b/src/socket.h index c0eb6278c..4a00016f8 100644 --- a/src/socket.h +++ b/src/socket.h @@ -94,6 +94,13 @@ class Socket { inline operator SOCKET() const { return sockfd; } + inline static int GetLastError(void) { +#ifdef _WIN32 + return WSAGetLastError(); +#else + return errno; +#endif + } /*! * \brief start up the socket module * call this before using the sockets diff --git a/windows/basic/basic.vcxproj b/windows/basic/basic.vcxproj index 4e686584c..109c405ef 100644 --- a/windows/basic/basic.vcxproj +++ b/windows/basic/basic.vcxproj @@ -100,6 +100,7 @@ true true ..\..\include + MultiThreaded true