Skip to content

Commit fcbea67

Browse files
authored
Make FileHTTP compile on windows (#4132)
1 parent 35f7225 commit fcbea67

File tree

4 files changed

+41
-10
lines changed

4 files changed

+41
-10
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ if(MSVC)
6767
-D_CRT_SECURE_NO_DEPRECATE
6868
-D_CRT_SECURE_NO_WARNINGS
6969
-D_SCL_SECURE_NO_DEPRECATE
70+
-D_WINSOCK_DEPRECATED_NO_WARNINGS
7071
-D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING
7172
)
7273
endif()

source/adios2/CMakeLists.txt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -229,9 +229,7 @@ target_compile_features(adios2_core PUBLIC "$<BUILD_INTERFACE:${ADIOS2_CXX11_FEA
229229

230230

231231
target_sources(adios2_core PRIVATE toolkit/transport/file/FilePOSIX.cpp)
232-
if(UNIX)
233-
target_sources(adios2_core PRIVATE toolkit/transport/file/FileHTTP.cpp)
234-
endif()
232+
target_sources(adios2_core PRIVATE toolkit/transport/file/FileHTTP.cpp)
235233

236234
if(ADIOS2_HAVE_AWSSDK)
237235
target_sources(adios2_core PRIVATE toolkit/transport/file/FileAWSSDK.cpp)

source/adios2/toolkit/transport/file/FileHTTP.cpp

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,29 @@
88
* Author: Dmitry Ganyushin [email protected]
99
*/
1010
#include "FileHTTP.h"
11+
#include <cstring>
12+
#ifdef _MSC_VER
13+
#define FD_SETSIZE 1024
14+
#include <process.h>
15+
#include <time.h>
16+
#include <winsock2.h>
17+
18+
#include <windows.h>
19+
#define getpid() _getpid()
20+
#define read(fd, buf, len) recv(fd, (buf), (len), 0)
21+
#define write(fd, buf, len) send(fd, buf, (len), 0)
22+
#define close(x) closesocket(x)
23+
#define INST_ADDRSTRLEN 50
24+
#else
25+
#include <netinet/in.h>
1126
#include <sys/socket.h>
1227

1328
#include <arpa/inet.h>
1429
#include <cstring>
1530
#include <netdb.h>
31+
#include <netinet/in.h>
1632
#include <unistd.h>
33+
#endif
1734
namespace adios2
1835
{
1936
namespace transport
@@ -43,7 +60,7 @@ void FileHTTP::Open(const std::string &name, const Mode openMode, const bool asy
4360
{
4461
struct protoent *protoent;
4562
struct hostent *hostent;
46-
in_addr_t in_addr;
63+
uint32_t addr_tmp;
4764

4865
m_Name = name;
4966
/* Build the socket. */
@@ -58,20 +75,21 @@ void FileHTTP::Open(const std::string &name, const Mode openMode, const bool asy
5875
/* get from parameters. Where the proxy should run*/
5976

6077
/* Build the address. */
78+
#define _WINSOCK_DEPRECATED_NO_WARNINGS 1
6179
hostent = gethostbyname(m_hostname.c_str());
6280
if (hostent == NULL)
6381
{
6482
helper::Throw<std::ios_base::failure>("Toolkit", "transport::file::FileHTTP", "Open",
6583
"error: gethostbyname " + m_hostname);
6684
}
67-
in_addr = inet_addr(inet_ntoa(*(struct in_addr *)*(hostent->h_addr_list)));
68-
if (in_addr == (in_addr_t)-1)
85+
addr_tmp = inet_addr(inet_ntoa(*(struct in_addr *)*(hostent->h_addr_list)));
86+
if (addr_tmp == INADDR_NONE)
6987
{
7088
helper::Throw<std::ios_base::failure>("Toolkit", "transport::file::FileHTTP", "Open",
7189
"error: inet_addr " +
7290
std::string(*(hostent->h_addr_list)));
7391
}
74-
sockaddr_in.sin_addr.s_addr = in_addr;
92+
sockaddr_in.sin_addr.s_addr = addr_tmp;
7593
sockaddr_in.sin_family = AF_INET;
7694
sockaddr_in.sin_port = htons(m_server_port);
7795

@@ -227,8 +245,9 @@ void FileHTTP::Read(char *buffer, size_t size, size_t start)
227245
size_t bytes_recd = 0;
228246
while (bytes_recd < size)
229247
{
230-
nbytes_total = read(m_socketFileDescriptor, buffer + bytes_recd,
231-
std::min(size - bytes_recd, BUF_SIZE));
248+
size_t remaining = size - bytes_recd;
249+
int read_len = (int)(remaining < BUF_SIZE ? remaining : BUF_SIZE);
250+
nbytes_total = read(m_socketFileDescriptor, buffer + bytes_recd, read_len);
232251
if (nbytes_total == -1)
233252
{
234253
helper::Throw<std::ios_base::failure>("Toolkit", "transport::file::FileHTTP", "Read",

source/adios2/toolkit/transport/file/FileHTTP.h

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,20 @@
1212

1313
#include "../Transport.h"
1414
#include "adios2/common/ADIOSConfig.h"
15+
#ifdef _MSC_VER
16+
#define FD_SETSIZE 1024
17+
#include <process.h>
18+
#include <time.h>
19+
#include <winsock2.h>
20+
21+
#include <windows.h>
22+
#define getpid() _getpid()
23+
#else
24+
#include <sys/socket.h>
25+
1526
#include <netinet/in.h>
27+
#define SOCKET int
28+
#endif
1629

1730
namespace adios2
1831
{
@@ -68,7 +81,7 @@ class FileHTTP : public Transport
6881

6982
private:
7083
/** POSIX file handle returned by Open */
71-
int m_socketFileDescriptor = -1;
84+
SOCKET m_socketFileDescriptor = -1;
7285
int m_Errno = 0;
7386
bool m_IsOpening = false;
7487
/* if filename is very lomg, we can get lout from array boundaries */

0 commit comments

Comments
 (0)