diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c2ea67687..26100e49af 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -67,6 +67,7 @@ if(MSVC) -D_CRT_SECURE_NO_DEPRECATE -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE + -D_WINSOCK_DEPRECATED_NO_WARNINGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING ) endif() diff --git a/source/adios2/CMakeLists.txt b/source/adios2/CMakeLists.txt index ff1645b4bb..3e7b1d37ea 100644 --- a/source/adios2/CMakeLists.txt +++ b/source/adios2/CMakeLists.txt @@ -229,9 +229,7 @@ target_compile_features(adios2_core PUBLIC "$ +#ifdef _MSC_VER +#define FD_SETSIZE 1024 +#include +#include +#include + +#include +#define getpid() _getpid() +#define read(fd, buf, len) recv(fd, (buf), (len), 0) +#define write(fd, buf, len) send(fd, buf, (len), 0) +#define close(x) closesocket(x) +#define INST_ADDRSTRLEN 50 +#else +#include #include #include #include #include +#include #include +#endif namespace adios2 { namespace transport @@ -43,7 +60,7 @@ void FileHTTP::Open(const std::string &name, const Mode openMode, const bool asy { struct protoent *protoent; struct hostent *hostent; - in_addr_t in_addr; + uint32_t addr_tmp; m_Name = name; /* Build the socket. */ @@ -58,20 +75,21 @@ void FileHTTP::Open(const std::string &name, const Mode openMode, const bool asy /* get from parameters. Where the proxy should run*/ /* Build the address. */ +#define _WINSOCK_DEPRECATED_NO_WARNINGS 1 hostent = gethostbyname(m_hostname.c_str()); if (hostent == NULL) { helper::Throw("Toolkit", "transport::file::FileHTTP", "Open", "error: gethostbyname " + m_hostname); } - in_addr = inet_addr(inet_ntoa(*(struct in_addr *)*(hostent->h_addr_list))); - if (in_addr == (in_addr_t)-1) + addr_tmp = inet_addr(inet_ntoa(*(struct in_addr *)*(hostent->h_addr_list))); + if (addr_tmp == INADDR_NONE) { helper::Throw("Toolkit", "transport::file::FileHTTP", "Open", "error: inet_addr " + std::string(*(hostent->h_addr_list))); } - sockaddr_in.sin_addr.s_addr = in_addr; + sockaddr_in.sin_addr.s_addr = addr_tmp; sockaddr_in.sin_family = AF_INET; sockaddr_in.sin_port = htons(m_server_port); @@ -227,8 +245,9 @@ void FileHTTP::Read(char *buffer, size_t size, size_t start) size_t bytes_recd = 0; while (bytes_recd < size) { - nbytes_total = read(m_socketFileDescriptor, buffer + bytes_recd, - std::min(size - bytes_recd, BUF_SIZE)); + size_t remaining = size - bytes_recd; + int read_len = (int)(remaining < BUF_SIZE ? remaining : BUF_SIZE); + nbytes_total = read(m_socketFileDescriptor, buffer + bytes_recd, read_len); if (nbytes_total == -1) { helper::Throw("Toolkit", "transport::file::FileHTTP", "Read", diff --git a/source/adios2/toolkit/transport/file/FileHTTP.h b/source/adios2/toolkit/transport/file/FileHTTP.h index 443d0c8c1c..0f80fbed41 100644 --- a/source/adios2/toolkit/transport/file/FileHTTP.h +++ b/source/adios2/toolkit/transport/file/FileHTTP.h @@ -12,7 +12,20 @@ #include "../Transport.h" #include "adios2/common/ADIOSConfig.h" +#ifdef _MSC_VER +#define FD_SETSIZE 1024 +#include +#include +#include + +#include +#define getpid() _getpid() +#else +#include + #include +#define SOCKET int +#endif namespace adios2 { @@ -68,7 +81,7 @@ class FileHTTP : public Transport private: /** POSIX file handle returned by Open */ - int m_socketFileDescriptor = -1; + SOCKET m_socketFileDescriptor = -1; int m_Errno = 0; bool m_IsOpening = false; /* if filename is very lomg, we can get lout from array boundaries */