diff --git a/CMakeLists.txt b/CMakeLists.txt index 203e2c1..5fa37c2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,11 +43,15 @@ elseif(UNIX AND NOT APPLE) message(STATUS "ON LINUX WASM BUILD") elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux") message(STATUS "ON LINUX BUILD") + elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + message(STATUS "ON FREEBSD BUILD") else() message(FATAL_ERROR "Unsupported operating system. Please create issue or contribute!") endif() - set(MGCLIENT_ON_LINUX TRUE) - add_definitions(-DMGCLIENT_ON_LINUX) + # Linux and FreeBSD share the same POSIX socket path in src/linux/, + # selected by MGCLIENT_ON_POSIX. + set(MGCLIENT_ON_POSIX TRUE) + add_definitions(-DMGCLIENT_ON_POSIX) set(MGCLIENT_FIND_LIBRARY_PREFIXES "${CMAKE_FIND_LIBRARY_PREFIXES}") elseif(APPLE) message(STATUS "ON APPLE BUILD") diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 6ede31e..f29626d 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -28,7 +28,7 @@ set(mgclient_src_files mgvalue.c) if(MGCLIENT_ON_APPLE) list(APPEND mgclient_src_files apple/mgsocket.c) -elseif(MGCLIENT_ON_LINUX) +elseif(MGCLIENT_ON_POSIX) list(APPEND mgclient_src_files linux/mgsocket.c) elseif(MGCLIENT_ON_WINDOWS) list(APPEND mgclient_src_files windows/mgsocket.c) diff --git a/src/linux/mgcommon.h b/src/linux/mgcommon.h index a2702aa..0b8f07f 100644 --- a/src/linux/mgcommon.h +++ b/src/linux/mgcommon.h @@ -15,6 +15,10 @@ #ifndef MGCLIENT_LINUX_MGCOMMON_H #define MGCLIENT_LINUX_MGCOMMON_H +#if defined(__FreeBSD__) +#include +#else #include +#endif #endif diff --git a/src/linux/mgsocket.c b/src/linux/mgsocket.c index 6adefd4..2bca678 100644 --- a/src/linux/mgsocket.c +++ b/src/linux/mgsocket.c @@ -102,15 +102,15 @@ int mg_socket_options(int sock, mg_session *session) { int optname; int optval; } socket_options[] = {// disable Nagle algorithm for performance reasons - {SOL_TCP, TCP_NODELAY, 1}, + {IPPROTO_TCP, TCP_NODELAY, 1}, // turn keep-alive on {SOL_SOCKET, SO_KEEPALIVE, 1}, // wait 20s before sending keep-alive packets - {SOL_TCP, TCP_KEEPIDLE, 20}, + {IPPROTO_TCP, TCP_KEEPIDLE, 20}, // 4 keep-alive packets must fail to close - {SOL_TCP, TCP_KEEPCNT, 4}, + {IPPROTO_TCP, TCP_KEEPCNT, 4}, // send keep-alive packets every 15s - {SOL_TCP, TCP_KEEPINTVL, 15}}; + {IPPROTO_TCP, TCP_KEEPINTVL, 15}}; const size_t OPTCNT = sizeof(socket_options) / sizeof(socket_options[0]); for (size_t i = 0; i < OPTCNT; ++i) { diff --git a/src/mgcommon.h b/src/mgcommon.h index bf2f04f..2aeac9a 100644 --- a/src/mgcommon.h +++ b/src/mgcommon.h @@ -23,9 +23,9 @@ extern "C" { #include "apple/mgcommon.h" #endif // MGCLIENT_ON_APPLE -#ifdef MGCLIENT_ON_LINUX +#ifdef MGCLIENT_ON_POSIX #include "linux/mgcommon.h" -#endif // MGCLIENT_ON_LINUX +#endif // MGCLIENT_ON_POSIX #ifdef MGCLIENT_ON_WINDOWS #include "windows/mgcommon.h" diff --git a/src/mgsocket.h b/src/mgsocket.h index 96143a8..62d994c 100644 --- a/src/mgsocket.h +++ b/src/mgsocket.h @@ -28,7 +28,7 @@ extern "C" { #include #endif // MGCLIENT_ON_APPLE -#ifdef MGCLIENT_ON_LINUX +#ifdef MGCLIENT_ON_POSIX #include #include #include @@ -38,7 +38,7 @@ extern "C" { #include #include #include -#endif // MGCLIENT_ON_LINUX +#endif // MGCLIENT_ON_POSIX #ifdef MGCLIENT_ON_WINDOWS #include diff --git a/src/mgtransport.c b/src/mgtransport.c index a134970..160daa4 100644 --- a/src/mgtransport.c +++ b/src/mgtransport.c @@ -17,11 +17,11 @@ #include #include #include -#ifdef MGCLIENT_ON_LINUX +#ifdef MGCLIENT_ON_POSIX #ifndef __EMSCRIPTEN__ #include #endif -#endif // MGCLIENT_ON_LINUX +#endif // MGCLIENT_ON_POSIX #include "mgallocator.h" #include "mgclient.h" diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cf079c0..3477ccf 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -45,7 +45,7 @@ add_gtest(client client.cpp) # We're mocking the mg_secure_transport_init function in the test. if(MGCLIENT_ON_APPLE) target_link_libraries(client -Wl,-alias,___wrap_mg_secure_transport_init,_mg_secure_transport_init) -elseif(MGCLIENT_ON_LINUX) +elseif(MGCLIENT_ON_POSIX) target_link_libraries(client -Wl,--wrap=mg_secure_transport_init) endif() add_gtest(transport transport.cpp)