diff --git a/src/messenger.cpp b/src/messenger.cpp index d08d5e9a..695404b7 100644 --- a/src/messenger.cpp +++ b/src/messenger.cpp @@ -490,7 +490,14 @@ void osd_messenger_t::check_peer_config(osd_client_t *cl) fprintf(stderr, "Connected to OSD %lu using RDMA\n", cl->osd_num); } cl->peer_state = PEER_RDMA; - tfd->set_fd_handler(cl->peer_fd, false, NULL); + tfd->set_fd_handler(cl->peer_fd, false, [this](int peer_fd, int epoll_events) + { + // Do not miss the disconnection! + if (epoll_events & EPOLLRDHUP) + { + handle_peer_epoll(peer_fd, epoll_events); + } + }); // Add the initial receive request try_recv_rdma(cl); } diff --git a/src/msgr_send.cpp b/src/msgr_send.cpp index 038629c8..0f702cf8 100644 --- a/src/msgr_send.cpp +++ b/src/msgr_send.cpp @@ -3,6 +3,7 @@ #define _XOPEN_SOURCE #include +#include #include "messenger.h" @@ -283,7 +284,14 @@ void osd_messenger_t::handle_send(int result, osd_client_t *cl) fprintf(stderr, "Successfully connected with client %d using RDMA\n", cl->peer_fd); } cl->peer_state = PEER_RDMA; - tfd->set_fd_handler(cl->peer_fd, false, NULL); + tfd->set_fd_handler(cl->peer_fd, false, [this](int peer_fd, int epoll_events) + { + // Do not miss the disconnection! + if (epoll_events & EPOLLRDHUP) + { + handle_peer_epoll(peer_fd, epoll_events); + } + }); // Add the initial receive request try_recv_rdma(cl); }