Как ограничить соединение в программировании сокетов Linux? - PullRequest
4 голосов
/ 30 августа 2010

Я хочу установить максимум соединения. Если оно больше максимального, сообщите клиенту, что сервер заполнен, и закройте сокет.

Как написать код на C?

Спасибо.

Ответы [ 2 ]

10 голосов
/ 30 августа 2010

Simple.В точке, где вы звоните accept(), что-то вроде этого:

new_conn = accept(listen_sock, &addr, addr_len);

if (new_conn > 0)
{
    if (total_connections < max_connections)
    {
        total_connections++;
        register_connection(new_conn);
    }
    else
    {
        send_reject_msg(new_conn);
        close(new_conn);
    }
}

(и, конечно, уменьшите total_connections в точке, где вы потеряете соединение).

0 голосов
/ 30 августа 2010

Ну, вы можете начать с этого учебника , прямо из моих закладок.Вы можете проверить второй аргумент функции int listen(int sockfd, int backlog);.

sockfd is the usual socket file descriptor from the socket() system call. 
backlog is the number of connections allowed on the incoming queue. What 
does that mean? Well, incoming connections are going to wait in this queue 
until you accept() them (see below) and this is the limit on how many can 
queue up. Most systems silently limit this number to about 20; you can 
probably get away with settingit to 5 or 10

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...