Функциональность epoll можно использовать для разработки решения для асинхронной связи сокетов. Я знаю, что EPOLLIN вызывается, когда в сокете есть данные, которые можно прочитать. Напротив, я думаю, что EPOLLOUT можно использовать для обозначения того, что есть некоторые данные, которые следует записать в сокет, но я не могу найти способ сделать это.
В моем сценарии серверное приложение может как отправлять, так и получать данные.
Скажем, у меня есть такой цикл:
Код: Выделить всё
for (;;)
{
int num_of_events = epoll_wait(fd, ep_events, 10, -1);
for (int i = 0; i < num_of_events; ++i)
{
if (events[i].data.fd == server_fd)
{
// new connection
}
else if (events[i].events & EPOLLIN)
{
// new data to read on socket
}
else if (events[i].events & EPOLLOUT)
{
// new data to write on sockets
}
}
}
Если есть данные, готовые к чтению из сокета, это означает, что был вызван EPOLLIN. А теперь давайте представим, что есть еще один поток, который генерирует данные для отправки. Каков правильный способ асинхронной передачи таких данных на сервер путем вызова события EPOLLOUT?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... nding-data