![]() |
|
Модераторы: xvr |
![]()
|
|
| Anton Vatchenko |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 460 Регистрация: 21.5.2004 Репутация: -1 Всего: -1 |
Итак, у меня есть 2 части проекта: обработчик входящих данных через epoll (формирование пакетов, назван у меня Network), и собственно в другой части разбор их (ClientThread).
Обработчик читает команду, сколько байт надо прочитать ну и собственно данные, и когда все это сформировано, посылает в разбор, где идет обычный if, else if для всех возможных команд. Проблема. Когда поступает новое соединение, то в Network создается Client, и указатель на него пишется в epoll, чтобы при поступлении новых данных, было куда их потом писать. Неизвестно, как заставить этот Network удалить указатель на клиента. Дело в том, что есть Client::close(), который делает close(socket), при этом указатель не чистится. А делать после close еще "delete this" как-то некрасиво. |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
используй shutdown вместо close
epoll_wait сгенерирует EPOLLHUP на сокете там же (в обработчике события) можно его закрыть и удалить поинтер -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |