Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > epoll() на клиенте и сервере. |
Автор: boostcoder 18.10.2010, 09:03 |
всем привет. интересует такой вопрос.. сервер мониторит дескрипторы сокетов на предмет изменения их состояния со стороны клиента. я вот о чем подумал: допустим, мне нужно чтоб клиент, так же, асинхронно, как и сервер, мог мониторить их на предмет изменения их состояния со стороны сервера. т.е. чтоб оба участника сессии могли одновременно быть и ведущими и ведомыми. такое возможно? спасибо. |
Автор: MAKCim 18.10.2010, 09:21 |
если сервер сам сообщает каждому клиенту о том, что остальные клиенты (сокеты) изменили свое состояние для этого, видимо, клиент должен открыть два соединения с сервером: одно обычное, второе - для мониторинга это если я правильно понял суть ;) |
Автор: MAKCim 18.10.2010, 11:20 |
по первому соединению "общаемся" по протоколу по второму получаем от сервера информацию о других клиентах как-то так |
Автор: boostcoder 18.10.2010, 11:24 |
запутали. поясню: хочу сделать так, чтоб клиент, так же как и сервер, мог определять изменение на сокете. т.е. чтоб оба были инициаторами сессии. клиент постучал на сервер, переключился в режим прослушивания сокета, сервер ответил, клиент получил событие изменения состояния сокета, и т.д.. не знаю как еще это объяснить.. |
Автор: MAKCim 18.10.2010, 11:42 |
connect() со стороны клиента вот здесь не понял то ли имеется в виду listen(), то ли добавление в epoll для получения ивэнтов... |
Автор: boostcoder 18.10.2010, 11:47 | ||
в этом то и вопрос. как реализовать задумку? чтоб клиент не тупо ожидал заранее известного ему события(чтения/записи). а слушал сокет на предмет появления на нем событий. Добавлено через 1 минуту и 58 секунд мне тут подсказывают, что наверняка мне нужен бэкконнект.. пошел в гугл.. Добавлено через 4 минуты и 52 секунды бэкконнект - позволяет подключаться к юзеру за натом. это не то. у меня юзер сам подключается к серверу. |
Автор: MAKCim 18.10.2010, 12:02 |
чет я все равно не догоняю, что надо ![]() разбираемся listen() надо для того, чтобы сделать сокет прослушивающимся, т. е. чтобы _получать_ новые коннекты еще раз, после конеекта от клиента к серверу что должен делать клиент? т. е. какая и о чем ему нужна информация? |
Автор: mes 18.10.2010, 12:04 | ||
![]() случаев взаимодействия всего два : 1. постоянно слушать - т.е опрос состояния 2. ждать события - тот же колбяк что Вам нужно не понятно .. |
Автор: xvr 18.10.2010, 14:40 |
Насколько я понял из туманных вопросов ТС, он хочет использовать epoll на обоих сторонах сокета (на сервере и у клиента). Это вполне возможно, epoll'у глубоко фиолетово, кто к кому подключался (если конечно от него хотят не мониторинг именно подключения). Собственно обмен данными (чтение/запись) в сокетах абсолютно симметричны, как со стороны сервера, так и со стороны клиента. |
Автор: boostcoder 18.10.2010, 14:46 | ||
именно! я вроде так и объяснил.. |
Автор: MAKCim 18.10.2010, 16:09 |
boostcoder, плин с моей т. з. это очевидно и в эту сторону я даже не думал... epoll'у в принципе все равно, что в него засовывают лишь бы объект был валиден и поддерживал poll |
Автор: boostcoder 18.10.2010, 16:24 | ||
все, понял. прежде чем код писать, хотел убедится что это возможно с теоретической т.з. мне казалось, что epoll() привилегия только одной из сторон в сессии. всем спасибо. |