powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / listen & accept
5 сообщений из 5, страница 1 из 1
listen & accept
    #33947660
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была поставлена след. задача: ограничить кол-во подключений к серверу.
Сделал, на сервере все ок, а вот некоторые клиенты думают, что соединяются, хотя сервер после лимита не пользует больше accept. Оказалось что дело в listen - точнее в размере очереди подключений. Сделал очередь равной 0, теперь только один клиент тупит - типа соединяется.

Так что же выходит, для клиента соединение наступает когда он попал к серверу в очередь listen, т.е. до вызова accept, которое может так никогда и не произойти???
Также выходит, что очередь не бывает равна 0, минимум 1. После вызова accept место сразу освобождается и туда запуливается след. клиент и кричит, что приконнектился.

И как мне теперь сделать, чтобы ни один клиент не тупил???
...
Рейтинг: 0 / 0
listen & accept
    #33947888
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нет, listen будет работать если очередь = 0, это точно.

Клиент, получивший неудачу в listen - получает ошибку ECONNREFUSED - именно в том случае если очередь полна, т.е. если один клиент уже есть (в случае 0)
вообще надо указывать тип ОС, ибо интерпретируют параметр backlog разные ОС и разные их версии по-разному: это или количество запросов или количество полностью установленных соединений.

Лучше всего посмотреть снифером, что же именно происходит, когда "клиент тупит"
imho.
...
Рейтинг: 0 / 0
listen & accept
    #33947966
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очередь = 0 или 1 неважно. Главное, что клиент попав в эту очередь успешно завершает функцию connect у себя. Т.е. он реально "думает", что соединился, хотя на серваке стоит ограничение, по достижении которого accept боллее не вызывается, а "тупящий" клиент продолжает висеть как бы в listen'e (очереди). Выходит, что клиент не тупит, просто он не знает, что accept для него вызван не будет. Может это можно устранить, если закрывать слушающий сокет, но тогда потом придется его заново открывать, биндить, когда соединений станет мало, поэтому закрывать не выход.
...
Рейтинг: 0 / 0
listen & accept
    #33948096
--null--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
imho лучше не мудрить с очередью, а вести список коннекций и вновь входящие при исчерпании лимита сразу завершать вызовом close()
...
Рейтинг: 0 / 0
listen & accept
    #33949292
Tubrik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
--null--imho лучше не мудрить с очередью, а вести список коннекций и вновь входящие при исчерпании лимита сразу завершать вызовом close()

Я полагал, что есть более красивое решение. Значит придется именно так.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / listen & accept
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]