Есть сервер. К нему конектятся клиенты. И если приложение достигает максимума открытых файлов, то происходит следующее:
1. Аксептор (отдельный поток) прерывается из select-а
2. Вызывается accept - на каждое новое соеденение
3. accept возвращает EMFILE - и соответственно сокет не открывается.
Вроди всё ок, но с клиентами случаются нехорошие вещи: они начинают отваливатся по таймауту, а не сразу, как отработал accept с ошибкой.
Чего бы хотелось: чтоб в случае перегруженого сервера (открыто слишком много соеденений) - клиенты сразу получали ошибку, а не ждали по 1, 5 или даже 10 секунд.
Можно както этого добится?
ЗЫ. accept - блокирующий и находится в выделеном потоку, но остальные операции с сокетами неблокирующие. Если сделать accept, неблокирующим чтото изменится?
Ответ на:
комментарий
от mky
Ответ на:
комментарий
от stpg
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Too many open files (2018)
- Форум open err_log.txt: too many open files (2019)
- Форум socket(): Too many open files (2016)
- Форум nginx Too many open files (2018)
- Форум Transmission too many open files (2019)
- Форум 3proxy - Too many open files (2014)
- Форум [limits] Too many open files (2011)
- Форум lisp: Too many open files (2006)
- Форум Расскажите в деталях как пользоваться неблокирующими сокетами (2017)
- Форум Too many open (2017)