listen(sock, backlog)
:
На мой взгляд, параметр backlog
ограничивает количество соединений. Вот мой тестовый код:
гнездо: прослушать с отставанием и принять
// server
// initialize the sockaddr of server
server.sin_family = AF_INET;
server.sin_addr.s_addr = INADDR_ANY;
server.sin_port = htons(8888);
bind(...);
listen(sock, 1);
while((client_sock = accept(...)))
{
// create a thread for one client
if(pthread_create(&sniffer_thread , NULL , connection_handler , (void*) new_sock) < 0)
{
perror("could not create thread");
return 1;
}
}
// client
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons(8888);
connect(...);
while(1)
{
scanf("%s" , message);
//Send some data
if(send(sock , message , strlen(message) , 0) < 0)
{
puts("Send failed");
return 1;
}
//Receive a reply from the server
if(recv(sock , server_reply , 2000 , 0) < 0)
{
puts("recv failed");
break;
}
puts("Server reply :");
puts(server_reply);
}
На моем компьютере, я исполню сервер, который ждет клиентов.
Затем я выполняю два клиента, оба из них могут отправлять и получать сообщения.
Вот что я не понимаю:
Почему мой сервер может принимать два разных клиента (два разных сокета)?
Я установил параметр backlog
как 1
для сервера listen
, почему он все еще может содержать более одного клиента?
Ваше «мнение» неверно. Если вы хотите ограничить количество подключений, которые могут быть установлены в любой момент, вы должны сделать это в своем коде. 'backlog' обрабатывает только новые запросы на соединение, которые еще не были полностью обработаны, а не установлены соединения. – twalberg
@twalberg OK. Теперь я понимаю. Большое спасибо. – Yves