|
|
|
listen & accept
|
|||
|---|---|---|---|
|
#18+
Была поставлена след. задача: ограничить кол-во подключений к серверу. Сделал, на сервере все ок, а вот некоторые клиенты думают, что соединяются, хотя сервер после лимита не пользует больше accept. Оказалось что дело в listen - точнее в размере очереди подключений. Сделал очередь равной 0, теперь только один клиент тупит - типа соединяется. Так что же выходит, для клиента соединение наступает когда он попал к серверу в очередь listen, т.е. до вызова accept, которое может так никогда и не произойти??? Также выходит, что очередь не бывает равна 0, минимум 1. После вызова accept место сразу освобождается и туда запуливается след. клиент и кричит, что приконнектился. И как мне теперь сделать, чтобы ни один клиент не тупил??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 17:38 |
|
||
|
listen & accept
|
|||
|---|---|---|---|
|
#18+
нет, listen будет работать если очередь = 0, это точно. Клиент, получивший неудачу в listen - получает ошибку ECONNREFUSED - именно в том случае если очередь полна, т.е. если один клиент уже есть (в случае 0) вообще надо указывать тип ОС, ибо интерпретируют параметр backlog разные ОС и разные их версии по-разному: это или количество запросов или количество полностью установленных соединений. Лучше всего посмотреть снифером, что же именно происходит, когда "клиент тупит" imho. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 18:49 |
|
||
|
listen & accept
|
|||
|---|---|---|---|
|
#18+
Очередь = 0 или 1 неважно. Главное, что клиент попав в эту очередь успешно завершает функцию connect у себя. Т.е. он реально "думает", что соединился, хотя на серваке стоит ограничение, по достижении которого accept боллее не вызывается, а "тупящий" клиент продолжает висеть как бы в listen'e (очереди). Выходит, что клиент не тупит, просто он не знает, что accept для него вызван не будет. Может это можно устранить, если закрывать слушающий сокет, но тогда потом придется его заново открывать, биндить, когда соединений станет мало, поэтому закрывать не выход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 19:20 |
|
||
|
listen & accept
|
|||
|---|---|---|---|
|
#18+
imho лучше не мудрить с очередью, а вести список коннекций и вновь входящие при исчерпании лимита сразу завершать вызовом close() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.08.2006, 21:06 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=338&tid=2030609]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
2ms |
| others: | 208ms |
| total: | 323ms |

| 0 / 0 |
