Теперь я пишу прокси-сервер для определения истинного сервера.Как использовать libev для одного события, ожидая двух сокетов двумя ev_io и ev_watch?
Архитектура системы может быть представлять на графике ниже:
(. Я на самом деле использовать мульти-потоки для обработки всех клиентов)
«клиент A» ← ----- ----- → 'прокси-сервер' ← ----- ----- → 'истинный сервер'
Я использую «libev.h» для его реализации, поэтому одному событию необходимо прослушать два сокета.
я найти пример, как:
struct MYIO w
{
ev_io io;
int serverfd;
int clientfd;
}
int main()
{
...
struct MYIO w;
w.clientfd = new_tcp_client ("127.0.0.1", 12346);
ev_io_init (&w.io, client2proxy_func, clientfd, EV_READ);
ev_io_start (loop, &w_io);
ev_timer_init (&timeout_watcher, timer_func, 5, 0.);
ev_timer_start (loop, &timeout_watcher);
...
}
Это только один И.О. событий.
Если я хочу подождать два io_ev то не получилось ... как это показано ниже:
(я также попробовать другой способ, но все они не смогли.)
...
w.clientfd = new_tcp_client ("127.0.0.1", 12346);
w.serverfd = new_tcp_server ("127.0.0.1", 12345);
ev_io_init (&w.io, client2proxy_func, clientfd, EV_READ);
ev_io_start (loop, &w_io);
ev_io_init (&w.io, proxy2server_func, serverfd, EV_READ);
ev_io_start (loop, &w_io);
ev_timer_init (&timeout_watcher, timer_func, 5, 0.);
ev_timer_start (loop, &timeout_watcher);
...
Как использовать libev в многозадачном режиме?
Как использовать libev для одного события, ожидая двух сокетов двумя ev_io и ev_watch?
Thx, It works! –