Пользователи хакеров RDMA, знает ли кто-нибудь, если rdma_get_recv_comp(), который вызывает __ibv_get_cq_event() когда-либо тайм-аут?Как избежать застревания в rdma_get_recv_comp() или __ibv_get_cq_event()?
Моя проблема с теми же программами, как показано здесь: RDMA program randomly hangs
Он отлично работает, но это не устойчив к случайным клиент отключается. В частности, если я принудительно убиваю клиента, тогда сервер застревает в rdma_get_recv_comp()/ipv_get_cq_event().
Это для Mellanox ConnectX-3, и я проверил, что таймаут по умолчанию равен 2.14s и повторяет = 1. Но я не понимаю, будет ли ibv_get_cq_event() в режиме блокировки даже тайм-аутом. Объяснение тайм-аута в документации ibv_modify_qp(), похоже, предполагает, что таймауты применяются только для отправки (rdma_get_send_comp()), поскольку только отправители ждут ACK. Но я не вижу никаких трудностей с тем, чтобы позволить получать также тайм-аут.
Если в этом случае ожидается зависание внутри rdma_get_recv_comp(), как я могу избежать его или реализовать тайм-аут?
Некоторые возможности:
изменить мой клиент последовательность выключения таким образом, что он выполняет все необходимые посылает так, что он не оставит rdma_get_recv_comp() на сервере висит?
заменить rdma_get_recv_comp() с петлей, что опросы для приема пополнений