У меня есть концептуальный вопрос относительно программирования сокетов и запуска команды select в цикле while. Посмотрите этот отрывок из примера эхо-сервера (написанного на python, но язык не имеет значения): http://ilab.cs.byu.edu/python/select/echoserver.html
while running:
inputready,outputready,exceptready = select.select(input,[],[])
for s in inputready:
if s == server:
# handle the server socket
client, address = server.accept()
input.append(client)
elif s == sys.stdin:
# handle standard input
junk = sys.stdin.readline()
running = 0
else:
# handle all other sockets
data = s.recv(size)
if data:
s.send(data)
else:
s.close()
input.remove(s)
Вопрос: каково ожидаемое поведение процесса при выполнении кода в цикле for, если в этот момент подключается новый клиент и отправляет данные? Есть ли какой-то буфер, который является частью библиотеки сокетов по умолчанию, чтобы при последующем вызове select он немедленно возвращался со значением, которое пришло во время обработки предыдущего запроса? Или новый клиент, подключающийся, когда сервер фактически не ожидает в select(), будет игнорироваться, и поэтому всегда возможно (хотя и маловероятно, учитывая, что мы говорим о миллисекундах) запросы будут отброшены?
(ПРИМЕЧАНИЕ: я провел некоторые эмпирические испытания на другой кодовой базе, использующей сокеты, и оказалось, что буфер есть — если это действительно задумано, каков типичный размер этого буфера?)