epoll用if(events[i].data.fd==sockfd)无法确定sockfd可读

时间:2021-10-19 00:05:56
最近在看unp,作者在6章用select实现str_cli函数,我尝试自己用epoll实现str_cli函数。
函数功能:epoll阻塞等待终端可读或者socket可读。
if(events[i].events&EPOLLIN)可以确定可读事件的发生,但是可读事件有两个,我用if(events[i].data.fd==fileno(stdin))确定输入可读,这个是可行的。但是用if(events[i].data.fd==socket)确定socket可读却行不通。网上一般都用if(evnets[i].data.fd==listenfd)确定连接的到来。可是我用同样的方法确定一个连接的可读却不行,不知道为什么?
第一次发帖,可能写得不清楚。。。。

3 个解决方案

#1


if(evnets[i].data.fd==listenfd)确定连接来这后,就用accept啊

#2


多谢回答,我的问题主要在于客户端上使用epoll,用epoll区分客户端上的连接可读还是客户端上的终端输入可读。并不是在于服务端上的监听,那里没问题,我就是想把epoll用在客户端上。

#3


引用 1 楼 tietiehe 的回复:
if(evnets[i].data.fd==listenfd)确定连接来这后,就用accept啊

多谢回答,我的问题主要在于客户端上使用epoll,用epoll区分客户端上的连接可读还是客户端上的终端输入可读。并不是在于服务端上的监听,那里没问题,我就是想把epoll用在客户端上。

#1


if(evnets[i].data.fd==listenfd)确定连接来这后,就用accept啊

#2


多谢回答,我的问题主要在于客户端上使用epoll,用epoll区分客户端上的连接可读还是客户端上的终端输入可读。并不是在于服务端上的监听,那里没问题,我就是想把epoll用在客户端上。

#3


引用 1 楼 tietiehe 的回复:
if(evnets[i].data.fd==listenfd)确定连接来这后,就用accept啊

多谢回答,我的问题主要在于客户端上使用epoll,用epoll区分客户端上的连接可读还是客户端上的终端输入可读。并不是在于服务端上的监听,那里没问题,我就是想把epoll用在客户端上。