Skip to content

Commit 787247e

Browse files
authored
Merge pull request #3 from romanwue/windows_support
Add support for windows
2 parents 2cca2b5 + 30776fc commit 787247e

File tree

3 files changed

+43
-9
lines changed

3 files changed

+43
-9
lines changed

CMakeLists.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,18 @@ project(ntp_client)
33

44
set(CMAKE_CXX_STANDARD 14)
55

6-
file(GLOB_RECURSE SOURCES src/*.cpp)
6+
file(GLOB_RECURSE SOURCES src/*.cpp include/*.h*)
77
include_directories(include)
88

99
add_library(${PROJECT_NAME} STATIC ${SOURCES})
1010

1111
add_executable(ntp_example main.cpp)
1212
target_link_libraries(ntp_example ${PROJECT_NAME})
1313

14+
if (WIN32)
15+
target_link_libraries(${PROJECT_NAME} ws2_32)
16+
endif()
17+
1418
# Instalación
1519
INSTALL(TARGETS ${PROJECT_NAME}
1620
LIBRARY

include/ntp_client.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,13 @@
22
#define NTPCLIENT_H
33

44
#include <string>
5-
#include <netinet/in.h>
5+
#ifdef _WIN32
6+
# include <WinSock2.h>
7+
using Socket = SOCKET;
8+
#else
9+
# include <netinet/in.h>
10+
using Socket = int;
11+
#endif
612

713
struct NTPPacket
814
{
@@ -89,7 +95,7 @@ struct NTPClient
8995
size_t port_;
9096

9197
/// @brief Socket file descriptor
92-
int socket_fd;
98+
Socket socket_fd;
9399

94100
/// @brief Server address data structure
95101
struct sockaddr_in socket_client;

src/ntp_client.cpp

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,24 @@
55

66
#include <stdio.h>
77
#include <sys/types.h>
8-
#include <sys/socket.h>
9-
#include <arpa/inet.h>
10-
#include <netdb.h>
8+
#ifdef _WIN32
9+
# include <WinSock2.h>
10+
# define close(X) closesocket(X)
11+
#else
12+
# include <sys/socket.h>
13+
# include <arpa/inet.h>
14+
# include <netdb.h>
15+
# include <unistd.h>
16+
#endif
1117
#include <time.h>
1218
#include <string.h>
13-
#include <unistd.h>
1419

1520
NTPClient::NTPClient(std::string hostname, uint16_t port) : hostname_(hostname), port_(port)
1621
{
22+
#ifdef _WIN32
23+
WSADATA wsaData = { 0 };
24+
(void)WSAStartup(MAKEWORD(2, 2), &wsaData);
25+
#endif;
1726
}
1827

1928
void NTPClient::build_connection()
@@ -41,7 +50,14 @@ void NTPClient::build_connection()
4150
socket_client.sin_addr.s_addr = inet_addr(ntp_server_ip.c_str());
4251
}
4352

44-
NTPClient::~NTPClient() { close(socket_fd); }
53+
NTPClient::~NTPClient()
54+
{
55+
close_socket();
56+
57+
#ifdef _WIN32
58+
WSACleanup();
59+
#endif
60+
}
4561

4662
uint64_t NTPClient::request_time()
4763
{
@@ -60,7 +76,11 @@ uint64_t NTPClient::request_time()
6076
packet.li_vn_mode = 0x1b;
6177

6278
std::cout << "Sending request\n";
63-
response = write(socket_fd, (char *)&packet, sizeof(NTPPacket));
79+
#ifdef _WIN32
80+
response = sendto(socket_fd, (char*)&packet, sizeof(NTPPacket), 0, (struct sockaddr*)&socket_client, sizeof(socket_client));
81+
#else
82+
response = write(socket_fd, (char*)&packet, sizeof(NTPPacket));
83+
#endif
6484

6585
if (response < 0)
6686
{
@@ -69,7 +89,11 @@ uint64_t NTPClient::request_time()
6989
}
7090

7191
std::cout << "Reading request\n";
92+
#ifdef _WIN32
93+
response = recv(socket_fd, (char*)&packet, sizeof(NTPPacket), 0);
94+
#else
7295
response = read(socket_fd, (char *)&packet, sizeof(NTPPacket));
96+
#endif
7397

7498
if (response < 0)
7599
{

0 commit comments

Comments
 (0)