kqueue即使在套接字关闭时也会阻塞

时间:2018-06-24 12:14:06

标签: c sockets tcp-ip

我正在以这种方式将套接字添加到kqueue列表(Id = kqueue()):

    struct kevent changes[1];
    int16 filter = 0;
    filter = filter | EVFILT_READ | EVFILT_USER;

    EV_SET(&changes[0], socket.GetNativeHandle() /* a valid socket fd */, filter, EV_ADD | EV_CLEAR | EV_ENABLE, 0, 0, NULL);

    int result = kevent(Id, changes, 1, NULL, 0, NULL);

    if (result == -1)
    {
        return false;
    }

    Events.Emplace();

,然后在循环中的某处:

    const int count = kevent(Id, NULL, 0, &Events[0], Events.GetSize(), NULL);

    if (count == -1)
    {
        return false;
    }

一切正常,但是当我直接使用close()关闭套接字fd时,Kqueue不执行任何操作,但仍阻塞了该线程。但是,当我直接在Kqueue fd上使用close()时,它可以工作,但这对我来说并不正确。有什么事吗缺少事件标志?

0 个答案:

没有答案