В результате ее работы в массиве array оказывается пакет размером BUF_SIZE. Есть ли какое-то стандартное решение при работе с этой функцией, чтобы постоянно принимать пакеты, да еще не все подряд а, отфильтрованные по значению в одном из элементов массива. Я пытался вот такой подход использовать:
do
result = recvfrom(iSocket, array, BUF_SIZE, 0, (struct sockaddr *)&sipx, (socklen_t*)&len_addr) ;
while ( array[8] == 42 ) ;// принимать пакет пока в array не окажется то, что нужно
Устраивало, до тех пор, пока не потребовалось еще одному процессу читать через этот сокет.
Что-нибудь на коленке сварганю, чтобы обслуживать N клиентов в N потоков. Скажем, тупое эхо.
Неее, код должен отражать всю ту логику, что в задании приведена. Указана структура фрейма и логика работы сервера. Ну и ещё про 10 секундный таймаут не забудь.
Правильно, epoll() скрыт в недрах класса zMainLoop. В том то и смысл оберток, что они скрывают реализацию. Если бы ты видел epoll(), то это была бы уже прямая работа с системным вызовом. Такая задача стоит у тебя.
Я хотел показать, как много можно скрыть за обертками. И это очень сильно облегчает труд программиста.
Мы тут отделяем общую часть, и специфичную для конкретного сервера. Общая часть не привязана ни к какой конкретной задаче.
Написали один раз такую библиотек-обертку или взяли готовую типа Boost::Asio, а потом пишем только специфичный код для конкретной задачи. Удобно, ты концентрируешься только на прикладной логике, а не захламляешь текст программы кусками кода, которые повторяются (примерно), от одного сервера к другому.
Весь приведенный код, это ровно то, что мне бы понадобилось для решения указанной задачи. Указанные классы не эфемерны, они взяты из реальной библиотеки, которую я написал и использую для таких задач.
Все украдено до нас! Очень напоминает обсуждение проблемы обслуживания 10000 клиентов. Вот классическая статья http://www.kegel.com/c10k.html. Там рассмотрены разные стратегии решения. (кстати статье уже 15 лет).
Там есть ссылки на примеры реализации и на С и на С++ и на Java
Мне надо ни мистический с10к, ни какой либо другой, а надо именно его код. Тем более с10к протух лет 10назад, ибо сейчас о чем-то кроме с500к активных соединений даже говорить не стоит.
Можно мне увидеть эти самый наработки? Можно мне рабочий код?
Не, я не хочу выкладывать. Там слишком много всего. Код явно не рассчитан на обучение и выкладывание и я считаю этот код своей интеллектуальной собственностью.
Если тема интересна, я может накатаю упрощенный вариант библиотеки, где все будет проще и понятнее и оформлю это в виде отдельного треда. Но обещать не могу. Я ленивый.
Сомневаюсь, что есть хоть какой-то шанс, что твоей код меня может чему-то научить.
я считаю этот код своей интеллектуальной собственностью
Что из этого следует?
Если тема интересна, я может накатаю упрощенный вариант библиотеки, где все будет проще и понятнее и оформлю это в виде отдельного треда. Но обещать не могу. Я ленивый.
Ты мне хотябы wс -l выкати своих портянок.
Т.е. берёшь свою «интеллектуальную» собственность и считаешь в ней кол-во строк. Выкатываешь результат. Всё просто. Или это тоже «„интеллектуальную“ собственность»?