diff --git a/src/knot/query/requestor.c b/src/knot/query/requestor.c index 94c38489d5d2647796ba47072599ea012747d722..a2bf68902c6ebac5622f52160c73753623a3f83a 100644 --- a/src/knot/query/requestor.c +++ b/src/knot/query/requestor.c @@ -96,7 +96,9 @@ static int request_send(knot_request_t *request, int timeout_ms) } else { ret = net_dgram_send(request->fd, wire, wire_len, NULL); } - if (ret != wire_len) { + if (ret < 0) { + return ret; + } else if (ret != wire_len) { return KNOT_ECONN; } diff --git a/tests/knot/test_requestor.c b/tests/knot/test_requestor.c index a1bdf1966da48ea9712fa6584772b66ae9282731..4226fc00d1dc02e8d9a01259a6a2ecb30e6a61c4 100644 --- a/tests/knot/test_requestor.c +++ b/tests/knot/test_requestor.c @@ -101,8 +101,8 @@ static void test_disconnected(knot_requestor_t *requestor, { knot_request_t *req = make_query(requestor, dst, src); int ret = knot_requestor_exec(requestor, req, TIMEOUT); - /* ECONNREFUSED is OK too on FreeBSD. */ - ret = (ret == KNOT_ECONNREFUSED) ? KNOT_ECONN : ret; + /* ECONNREFUSED on FreeBSD, ETIMEOUT on NetBSD/OpenBSD/macOS. */ + ret = (ret == KNOT_ECONNREFUSED || ret == KNOT_ETIMEOUT) ? KNOT_ECONN : ret; is_int(KNOT_ECONN, ret, "requestor: disconnected/exec"); knot_request_free(req, requestor->mm);