Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Сети > Broken pipe |
Автор: theworldcreator 2.6.2011, 18:17 | ||
Пишу сервер раздающий данные клиентам. В бесконечном цикле смотрим не появилось ли чего на listen сокете -- если появилось обрабатываем запрос и отправляем ответ. Написано на C
Исходный код полностью тут: https://github.com/theWorldCreator/Fviewer/blob/master/server/proxy_server.c Когда клиент и сервер на одном компьютере -- все идеально, мой ноутбук выдерживает и серверную часть и 1200 клиентов каждый из которых посылает по запросу раз в 5 секунд (на большее просто оперативной памяти не хватило, а сервер тратил 12 процентов процессора и мегабайт оперативной памяти). А вот после перенесения на vps уже после 400 клиентов программа завершается со словами "Broken pipe" Подскажите, пожалуйста, в какую сторону копать Спасибо |
Автор: afiskon 2.6.2011, 19:20 |
Классика жанра. SIG_PIPE, получаемый процессом при попытки чтения/записи из/в закрытый сокет или пайп, убивает процесс. Пропишите обработчик этого сигнала. |
Автор: theworldcreator 2.6.2011, 19:31 |
Благодарю! |
Автор: theworldcreator 2.6.2011, 20:48 | ||
Почитал, я правильно понимаю -- достаточно завести глобальную переменную в которой сохранять сокет, с которым работаешь в данный момент, потом повесить обработчик вот так:
и в обработчике сбрасывать текущий сокет в ноль и делать пометку -- не использовать его более, верно? |