learn-tars icon indicating copy to clipboard operation
learn-tars copied to clipboard

请教一个问题:

Open jiangbo9510 opened this issue 7 years ago • 3 comments

同步调用的时候,最后一步是:

void CommunicatorEpoll::notify(size_t iSeq,ReqInfoQueue * msgQueue)
{
    if(_notify[iSeq].bValid)
    {
        _ep.mod(_notify[iSeq].notify.getfd(),(long long)&_notify[iSeq].stFDInfo, EPOLLIN);
        assert(_notify[iSeq].stFDInfo.p == (void*)msgQueue);
    }
    else
    {
        _notify[iSeq].stFDInfo.iType   = FDInfo::ET_C_NOTIFY;
        _notify[iSeq].stFDInfo.p       = (void*)msgQueue;
        _notify[iSeq].stFDInfo.fd      = _notify[iSeq].eventFd;
        _notify[iSeq].stFDInfo.iSeq    = iSeq;
        _notify[iSeq].notify.createSocket();
        _notify[iSeq].bValid           = true;

        _ep.add(_notify[iSeq].notify.getfd(),(long long)&_notify[iSeq].stFDInfo, EPOLLIN);
    }
}

这一步是吧fd加到了epoll的监听中,epoll监听收到了NOTIFY类型的消息,就会发送该消息,那是怎么触发epoll的呢?

jiangbo9510 avatar Dec 25 '18 14:12 jiangbo9510

多谢了

jiangbo9510 avatar Dec 27 '18 01:12 jiangbo9510

这个fd设置为EPOLLIN时候,就会触发epoll_wait,从而能收到NOTIFY类型的消息

Myicefrog avatar Jan 03 '19 10:01 Myicefrog

可以自己写个demo试试

Myicefrog avatar Jan 03 '19 10:01 Myicefrog