Skip to content

Commit

Permalink
Make FileHTTP compile on windows (#4132)
Browse files Browse the repository at this point in the history
  • Loading branch information
eisenhauer committed Apr 16, 2024
1 parent 35f7225 commit fcbea67
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 10 deletions.
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down
4 changes: 1 addition & 3 deletions source/adios2/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -229,9 +229,7 @@ target_compile_features(adios2_core PUBLIC "$<BUILD_INTERFACE:${ADIOS2_CXX11_FEA


target_sources(adios2_core PRIVATE toolkit/transport/file/FilePOSIX.cpp)
if(UNIX)
target_sources(adios2_core PRIVATE toolkit/transport/file/FileHTTP.cpp)
endif()
target_sources(adios2_core PRIVATE toolkit/transport/file/FileHTTP.cpp)

if(ADIOS2_HAVE_AWSSDK)
target_sources(adios2_core PRIVATE toolkit/transport/file/FileAWSSDK.cpp)
Expand Down
31 changes: 25 additions & 6 deletions source/adios2/toolkit/transport/file/FileHTTP.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,29 @@
* Author: Dmitry Ganyushin ganyushin@gmail.com
*/
#include "FileHTTP.h"
#include <cstring>
#ifdef _MSC_VER
#define FD_SETSIZE 1024
#include <process.h>
#include <time.h>
#include <winsock2.h>

#include <windows.h>
#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 <netinet/in.h>
#include <sys/socket.h>

#include <arpa/inet.h>
#include <cstring>
#include <netdb.h>
#include <netinet/in.h>
#include <unistd.h>
#endif
namespace adios2
{
namespace transport
Expand Down Expand Up @@ -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. */
Expand All @@ -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<std::ios_base::failure>("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<std::ios_base::failure>("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);

Expand Down Expand Up @@ -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<std::ios_base::failure>("Toolkit", "transport::file::FileHTTP", "Read",
Expand Down
15 changes: 14 additions & 1 deletion source/adios2/toolkit/transport/file/FileHTTP.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,20 @@

#include "../Transport.h"
#include "adios2/common/ADIOSConfig.h"
#ifdef _MSC_VER
#define FD_SETSIZE 1024
#include <process.h>
#include <time.h>
#include <winsock2.h>

#include <windows.h>
#define getpid() _getpid()
#else
#include <sys/socket.h>

#include <netinet/in.h>
#define SOCKET int
#endif

namespace adios2
{
Expand Down Expand Up @@ -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 */
Expand Down

0 comments on commit fcbea67

Please sign in to comment.