是否可以手动将EPOLLIN
事件发送到epoll
以获取套接字文件描述符而无需将数据写入套接字?
也许可以使用fcntl
或ioctl
来停止epoll_wait
功能,不是吗?
更新:
据我所知,在大多数情况下,这样做是没有意义的,但我认为这在我的案例中确实有意义。
我正在为程序编写网络插件,我无法修改。插件API给了我一个套接字FD,并告诉我编写一个函数来从套接字读取n
个字节。我使用ssl_read
库中的polarssl
函数,将所有数据读入自己的内部缓冲区,超过n
个字节。
该计划会发生什么?当套接字接收数据时程序等待(epoll_wait
),然后告诉插件读取大约4kB的数据。然后它等待套接字接收下一个数据。当套接字接收12kB数据时,程序调用插件中的read
函数,该函数使用ssl_read
函数读取所有数据。因此,没有更多可用于套接字的数据,但polarssl
库有自己的缓冲区,它有大约8kB的可用数据。
所以现在我需要告诉程序调用插件的read
函数,它不会直接从套接字读取数据,而是从内部polarssl
缓冲区读取数据