diff --git a/src/net/sock_address_factory.cpp b/src/net/sock_address_factory.cpp index 98bdcd75a9971bb0985e5cdcb6d1559bfcedcee1..c4b92091a6491723d9a6c2be3aaf4257eedfc1af 100644 --- a/src/net/sock_address_factory.cpp +++ b/src/net/sock_address_factory.cpp @@ -166,7 +166,11 @@ namespace rmrf::net { if (socket_type == socket_t::UNIX) { sockaddr_un storage; strncpy(storage.sun_path, interface_description.c_str(), sizeof(storage.sun_path)); - std::list<socketaddr> l = {socketaddr{storage}}; + // Required as the automatic initialization of sockaddr_un is broken on linux. + // This will be optimized out on platforms where it is not. + ((sockaddr*) &storage)->sa_family = AF_UNIX; + const socketaddr sa{storage}; + std::list<socketaddr> l = {sa}; return l; } diff --git a/test/address_tests.cpp b/test/address_tests.cpp index 867be3e901d52fb880b4882235be4f2e9e402343..0c9512b50c6e27989929320d1c00600daf5e40a3 100644 --- a/test/address_tests.cpp +++ b/test/address_tests.cpp @@ -65,5 +65,5 @@ BOOST_AUTO_TEST_CASE(Socketaddr_comparison) { BOOST_AUTO_TEST_CASE(Unix_socket_construction_test) { const auto sa = get_first_general_socketaddr("/tmp/9Lq7BNBnBycd6nxy.socket", "", socket_t::UNIX); - BOOST_CHECK_EQUAL(sa.str(), "FileSocket /tmp/9Lq7BNBnBycd6nxy.socket"); + BOOST_CHECK_EQUAL(sa.str(), "SocketAddress: FileSocket /tmp/9Lq7BNBnBycd6nxy.socket"); }