@@ -23,59 +23,55 @@ namespace dds::network::local {
2323acceptor::acceptor (const std::string_view &sv)
2424{
2525 // NOLINTNEXTLINE(android-cloexec-socket,cppcoreguidelines-prefer-member-initializer)
26- sock_ = ::socket (AF_UNIX, SOCK_STREAM, 0 );
27- if (sock_ == - 1 ) {
26+ sock_ = owned_fd{ ::socket (AF_UNIX, SOCK_STREAM, 0 )} ;
27+ if (sock_. is_empty () ) {
2828 throw std::system_error (errno, std::generic_category ());
2929 }
3030
31- try {
32- struct sockaddr_un addr {};
33- addr.sun_family = AF_UNIX;
34- if (sv.size () > sizeof (addr.sun_path ) - 1 ) {
35- throw std::invalid_argument{" socket path too long" };
36- }
37- strcpy (static_cast <char *>(addr.sun_path ), sv.data ()); // NOLINT
31+ struct sockaddr_un addr {};
32+ addr.sun_family = AF_UNIX;
33+ if (sv.size () > sizeof (addr.sun_path ) - 1 ) {
34+ throw std::invalid_argument{" socket path too long" };
35+ }
36+ strcpy (static_cast <char *>(addr.sun_path ), sv.data ()); // NOLINT
3837
39- // Remove the existing socket
40- int res = ::unlink (static_cast <char *>(addr.sun_path ));
41- if (res == -1 && errno != ENOENT) {
42- SPDLOG_ERROR (" Failed to unlink {}: errno {}" , addr.sun_path , errno);
43- throw std::system_error (errno, std::generic_category ());
44- }
45- SPDLOG_DEBUG (" Unlinked {}" , addr.sun_path );
38+ // Remove the existing socket
39+ int res = ::unlink (static_cast <char *>(addr.sun_path ));
40+ if (res == -1 && errno != ENOENT) {
41+ SPDLOG_ERROR (" Failed to unlink {}: errno {}" , addr.sun_path , errno);
42+ throw std::system_error (errno, std::generic_category ());
43+ }
44+ SPDLOG_DEBUG (" Unlinked {}" , addr.sun_path );
4645
47- res =
48- // NOLINTNEXTLINE
49- ::bind (sock_, reinterpret_cast <struct sockaddr *>(&addr),
50- sizeof(addr));
51- if (res == -1 ) {
52- SPDLOG_ERROR (
53- " Failed to bind socket to {}: errno {}" , addr.sun_path , errno);
54- throw std::system_error (errno, std::generic_category ());
55- }
46+ res =
47+ // NOLINTNEXTLINE
48+ ::bind (sock_.get() , reinterpret_cast<struct sockaddr *>(&addr),
49+ sizeof(addr));
50+ if (res == -1 ) {
51+ SPDLOG_ERROR (
52+ " Failed to bind socket to {}: errno {}" , addr.sun_path , errno);
53+ throw std::system_error (errno, std::generic_category ());
54+ }
5655
57- res = ::chmod (sv.data (), 0777 ); // NOLINT
58- if (res == -1 ) {
59- SPDLOG_ERROR (
60- " Failed to chmod socket {}: errno {}" , addr.sun_path , errno);
61- throw std::system_error (errno, std::generic_category ());
62- }
56+ res = ::chmod (sv.data (), 0777 ); // NOLINT
57+ if (res == -1 ) {
58+ SPDLOG_ERROR (
59+ " Failed to chmod socket {}: errno {}" , addr.sun_path , errno);
60+ throw std::system_error (errno, std::generic_category ());
61+ }
6362
64- static constexpr int backlog = 50 ;
65- if (::listen (sock_, backlog) == -1 ) {
66- throw std::system_error (errno, std::generic_category ());
67- }
68- SPDLOG_INFO (" Started listening on {}" , sv);
69- } catch (const std::exception &e) {
70- ::close (sock_);
71- throw ;
63+ static constexpr int backlog = 50 ;
64+ if (::listen (sock_.get (), backlog) == -1 ) {
65+ throw std::system_error (errno, std::generic_category ());
7266 }
67+ SPDLOG_INFO (" Started listening on {}" , sv);
7368}
7469
7570void acceptor::set_accept_timeout (std::chrono::seconds timeout)
7671{
7772 struct timeval tv = {timeout.count (), 0 };
78- int const res = setsockopt (sock_, SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof (tv));
73+ int const res =
74+ setsockopt (sock_.get (), SOL_SOCKET, SO_RCVTIMEO, &tv, sizeof (tv));
7975 if (res == -1 ) {
8076 throw std::system_error (errno, std::generic_category ());
8177 }
@@ -86,8 +82,9 @@ std::unique_ptr<base_socket> acceptor::accept()
8682 struct sockaddr_un addr {};
8783 socklen_t len = sizeof (addr);
8884
89- // NOLINTNEXTLINE
90- int s = ::accept (sock_, reinterpret_cast <struct sockaddr *>(&addr), &len);
85+ int s =
86+ // NOLINTNEXTLINE
87+ ::accept (sock_.get(), reinterpret_cast<struct sockaddr *>(&addr), &len);
9188 if (s == -1 ) {
9289 if (errno == EINTR || errno == EAGAIN) {
9390 return {};
0 commit comments