![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
vinick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 6 Всего: 22 |
Если таймаут 0, то селект будет ждать пока на сокетах не произойдет события. Так что если нет событий, то другие ты вставить не сможешь. Если ставить маленький, но реальный, таймаут, то тоже возможны ситуации когда сокет с данными простаивает слишком долго из-за того что он оказался в конце твоей очереди. Может все-таки лучше использовать другие механизмы, для которых нет ограничения на количество сокетов. А для кросс-платформености использовать готовые обертки типа boost.asio или ACE или самому написать такую обертку. |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
в linux, ребята, есть epoll, а это реально мощная штука
![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
где такое написано? селект блокируется если передать 0 вместо timeout а не если передать структуру с таймаутом 0. МСДН
Так я и пишу обертку. а как ее писать то? MAKCim Вы видимо темой ошиблись ![]() http://forum.vingrad.ru/forum/topic-248292.html Я прекрасно знаю что линукс мощная штука...проблема в кроссплатформенности ![]() Это сообщение отредактировал(а) azesmcar - 16.4.2009, 11:41 |
||||||
|
|||||||
vinick |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 6 Всего: 22 |
Извиняюсь. я почему-то решил что передаешь именно нулевой указатель.
По другому наверно никак. |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
Ну пока я ничего не передаю ![]() vinick про "I/O completion ports" если можно подробнее... кстати, а в БСД что, нет poll, epoll? |
|||
|
||||
vinick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 6 Всего: 22 |
я про них знаю только название и то что они являются аналогом epoll в линуксе ![]() poll скорее всего есть - это тот же select только в профиль. а вот epoll это чисто линуксовая штучка, ее аналогом в BSD является kqueue. Подробнее по *nix-вым механизмам можешь посмотреть здесь The 10k problem |
|||
|
||||
Олег2005 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
В лоб - но работать будет ![]() Про IO completion port я уже где-то выкладывал - лень искать, выложу еще раз: Присоединённый файл ( Кол-во скачиваний: 21 ) ![]() |
|||
|
||||
azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
Работать то будет..но хотелось бы чтобы работало хорошо ![]()
спасибо, посмотрел..так тут разница с линуксом огромная, практически нужно разные классы писать под виндоуз и под линукс..надо подумать что предпочтительней.. Это сообщение отредактировал(а) azesmcar - 16.4.2009, 13:21 |
||||
|
|||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
Еще одна мысль.
Поскольку сокеты все неблокирующие (так как в этом потоке мне нужно проверять и другие события, не только на сокетах), можно убрать селект вообще. Подробнее... На данный момент (если забыть про проблему селекта) у меня работает такая схема при каждой проверке события
в случае если убрать селект и проверять события функцией recv на каждом сокете по отдельности, одной итерацией по сокетам будет меньше..что вы об этом думаете? |
|||
|
||||
vinick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 6 Всего: 22 |
recv как ни крути - системный вызов. Пробежаться по массиву и проверить событие в fd_set в юзерспейсе при большом количестве дескрипторов, будет дешевле чем впустую дергать recv для каждого сокета. Тут лучше будет экономить не на итерациях по сокетам, а на системных вызовах. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
vinick
а точно что будет медленее? подумать не стоит? |
|||
|
||||
Олег2005 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
Согласен. |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
![]() ![]() ![]() ладно...буду думать. всем спасибо, решенным пока не отмечаю, мало ли.. |
|||
|
||||
vinick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 6 Всего: 22 |
azesmcar, как я понял ты используешь С++, тогда я порекомендую использовать готовую библиотеку Asio C++ library Она проста в использовании, кроссплатформенна, подерживает не только windows и Linux но и Solaris, MacOSX и т.п., состоит только из *.h фалов, Она включена в состав буста, но может быть использована и отдельно. В крайнем случае ты можешь посмотреть на ее внутрености и попробовать реализовать свое по образу и подобию, выкинув лишнее, там правда очень много шаблонной магии. Короче то что надо ![]() |
|||
|
||||
azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 3 Всего: 211 |
vinick
С++ конечно ![]() ![]() У меня своя кроссплатформенная библиотека, с обработкой событий (делегаты, итд, итп...) потому пишу свой класс, чтобы встраивался под общую архитектуру и выдавал события в нужном мне виде...у меня болезненный принцип не использовать ничего написанного сторонними производителями (после работы в одной компании остался осадок ![]() ![]() Завтра скачаю посмотрю - отпишусь..сегодня уже не успеть.. Спасибо Это сообщение отредактировал(а) azesmcar - 16.4.2009, 16:27 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |