gpt4 book ai didi

c - EPOLLIN 并在没有 EPOLLOUT 的情况下发送

转载 作者:行者123 更新时间:2023-11-30 17:54:54 27 4
gpt4 key购买 nike

在您的帮助和阅读其他资源后,我已经能够成功使用 epoll,我现在面临的问题是我需要发送到与 EPOLLOUT 事件返回不同的 FD,所以如果我有 5 个 FD,那么我需要发送到 1,然后发送到 4,然后返回到 1,然后发送到 5,依此类推。

以下伪代码是我现在拥有的 IN 和 OUT 事件的伪代码,

 while(1) {

rval = epoll_wait();

for (i = 0; i < rval; i++) {
if (events & EPOLLOUT) {
//send to the ready FD for sending
}
if (events & EPOLLIN) {
//Receive from ready fd, this part is perfect for my application
}
}
}

我需要做的是类似下面的事情

char buff[100];
fd = read_data(buff); // read data ready to send, the return value is the FD the application should send the returned data to

send(fd, buff, 100, 0);

然后我需要EPOLLIN从任何FD接收数据,因为我将一直从所有FD接收数据,我不知道该怎么做,你能帮忙吗?

最佳答案

您应该在每个可以发送的 FD 周围添加一层包装:让它有一些表示“就绪”的状态,以及一个本地数据队列。现在制作一个接受数据的接口(interface)。如果状态不是“就绪”,则立即将数据入队并返回。否则尝试发送数据(在循环中),如果您点击 EAGAIN 或 EWOULDBLOCK,则将其余数据排入队列并将“ready”设置为 false。

同时,在主事件循环中,每当收到 EPOLLOUT 时,都会进入 send 循环来排空队列,如果完成后没有错误,则将“ready”设置为 true。 (按照这个逻辑,假设您处于边沿触发模式,EPOLLOUT 应该仅在您的 FD 未“就绪”时触发。)

关于c - EPOLLIN 并在没有 EPOLLOUT 的情况下发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678018/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com