как ограничить количество соединений в клиент-серверной программе - PullRequest
1 голос
/ 12 ноября 2010

Мне нужна серверная программа, которая должна принимать не более одного соединения и отбрасывать другие соединения. Как мне этого добиться?

Ответы [ 3 ]

4 голосов
/ 13 ноября 2010

Только accept() одно соединение.

Вот типичная серверная процедура:

s = socket(...);
bind(s, ...);
listen(s, backlog);
while (-1 != (t = accept(s, ...))) {
    // t is a new peer, maybe you push it into an array
    // or pass it off to some other part of the program
}

Каждый завершенный accept() вызов возвращает дескриптор файладля нового соединения.Если вы хотите получить только одиночное соединение, только accept() один раз.Предположительно, вы закончили прослушивание после этого, поэтому закройте свой сервер тоже:

s = socket(...);
bind(s, ...);
listen(s, backlog);
t = accept(s, ...);
close(s);
// do stuff with t

Если вы хотите обрабатывать только одно соединение за раз, и после того, как это соединение закрывается, возобновите прослушивание, затем выполните accept() петля выше, и принимайте дальнейшие соединения, пока t не закроется.

1 голос
/ 12 ноября 2010

Исправления см. Ниже:
Вы можете определить количество принятых запросов в методе listen .

listen(socketDescription, numberOfConnectionsPending); 

Второй параметр предназначен для установки количества ожидающих соединений, а не количества самих соединений.

Если вы установите numberOfConnections на 1 для всех остальныхклиенты, отправляющие запрос на сервер, получат ошибку тайм-аута ..

Здесь вы можете найти больше информации: http://shoe.bocks.com/net/#listen

Я прочитал прослушиваниедокументация неправильная.Вам следует работать с методом accept, который описан в ответе Мэтта.

0 голосов
/ 12 ноября 2010

Хотите отклонить все соединения или сделать очередь?Я думаю, что вы ищете так называемый "синглтон".Посмотрите в википедии шаблон проектирования Singleton.

...