当前位置: 技术问答>linux和unix
有人碰到过epoll丢信号吗
来源: 互联网 发布时间:2016-06-24
本文导语: 在用epoll做网络程序的时候碰到一个怪问题,发现有时候调了connect之后epoll不返回任何信号, 代码片段如下: m_socket_fd = socket(PF_INET, SOCK_STREAM, 0); int32 flag = fcntl( m_socket_fd, F_GETFL, 0); fcntl( m_socket_fd, F_SETFL, fla...
在用epoll做网络程序的时候碰到一个怪问题,发现有时候调了connect之后epoll不返回任何信号, 代码片段如下:
m_socket_fd = socket(PF_INET, SOCK_STREAM, 0);
int32 flag = fcntl( m_socket_fd, F_GETFL, 0);
fcntl( m_socket_fd, F_SETFL, flag | O_NONBLOCK | O_ASYNC);
struct epoll_event evt = {0};
evt.data.fd = m_socket_fd;
evt.events = EPOLLIN | EPOLLOUT | EPOLLERR | EPOLLHUP | EPOLLET;
epoll_ctl(m_epoll_fd, EPOLL_CTL_ADD, fd, &evt);
int32 ret = ::connect(m_socket_fd, (struct sockaddr *)&sock_addr, sizeof(sock_addr));
connect函数返回-1,为EINPROGRESS, 需要等epoll报告on connect, 但是epoll什么信号也没有返回。
有网络高手能帮忙分析下吗
m_socket_fd = socket(PF_INET, SOCK_STREAM, 0);
int32 flag = fcntl( m_socket_fd, F_GETFL, 0);
fcntl( m_socket_fd, F_SETFL, flag | O_NONBLOCK | O_ASYNC);
struct epoll_event evt = {0};
evt.data.fd = m_socket_fd;
evt.events = EPOLLIN | EPOLLOUT | EPOLLERR | EPOLLHUP | EPOLLET;
epoll_ctl(m_epoll_fd, EPOLL_CTL_ADD, fd, &evt);
int32 ret = ::connect(m_socket_fd, (struct sockaddr *)&sock_addr, sizeof(sock_addr));
connect函数返回-1,为EINPROGRESS, 需要等epoll报告on connect, 但是epoll什么信号也没有返回。
有网络高手能帮忙分析下吗
|
是不是逻辑有错误 丢失了信号
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。