我有一个用于接收和发送数据包的套接字。伪代码是:
setnonblock(fd);
add_event(event_base, recv_ev);
while("I have packets to write"){
send(fd, packet);
....
}
....
现在的问题是,因为fd是非阻塞的,所以在完成发送数据包之前发送(fd)许多返回。但我希望它能在程序运行到下一步之前成功发送数据包,或者为它注册一个事件。但是如果我为它注册一个事件,即使没有可用的数据包,事件也可能被频繁触发(注意数据包不是来自伪代码中的recv(),而是来自其他地方)
那么如何应对呢?答案 0 :(得分:1)
这一切都回到了前面。套接字几乎总是可写的。所以你应该: