Вызовите EPOLLOUT, чтобы сигнализировать о событии для отправки данных.Linux

Ответить
Anonymous
 Вызовите EPOLLOUT, чтобы сигнализировать о событии для отправки данных.

Сообщение Anonymous »

Функциональность 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»