2014-12-19 4 views
0

Я нахожусь в Windows. У меня есть сервер с блокирующим сокетом, который должен принимать клиента за раз и разрешить ему выполнять некоторые операции над буфером. Когда первый клиент заканчивается, он должен обслуживать второй и т. Д. Однако, похоже, он принимает две связи. Он позволяет только первому клиенту выполнять операции, а когда второй отключается, он обслуживает второй. Третий клиент не может подключиться.Почему мой клиент принимает 2 подключения?

Сервер

import socket 
import sys 

HOST = '' 
PORT = 5552 

buffer = [] 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

try: 
    sock.bind((HOST, PORT)) 
except socket.error: 
    sys.exit() 

sock.listen(1) 
client, client_addr = sock.accept() 

#OPERATIONS 

Client

import socket 
import sys 

def connect(sock, ip, port): 
    try: 
     sock.connect((ip, port)) 
    except socket.error: 
     sys.exit() 

def send(sock, message): 
    try: 
     sock.sendall(message) 
    except socket.error: 
     return -1 

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 

host = 'localhost' 
port = 5552 

try: 
    ip = socket.gethostbyname(host) 
except socket.gaierror: 
    sys.exit() 

connect(sock, ip, port) 

#OPERATIONS 

ответ

1

От listen.__doc__:

Enable a server to accept connections. The backlog argument must be at 
    least 0 (if it is lower, it is set to 0); it specifies the number of 
    unaccepted connections that the system will allow before refusing new 
    connections. 

Ваш сервер готов принять другого клиента, потому что вы сказали ему сделать это.

Изменение неудовлетворенный аргумента на:

sock.listen(1) 

к:

sock.listen(0) 

и ваш сервер остановится позволяя, что второе соединение ждать, чтобы быть принятым.

+0

Он ведет себя точно так же. Если я увеличиваю аргумент backlog, он принимает больше подключений, но если я установил его на ноль, это будет одинаково. –