У меня есть концептуальный вопрос относительно программирования сокетов и запуска команды 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 (), будет проигнорирован, и поэтому всегда возможно (хотя и маловероятно, учитывая, что мы говорим миллисекунды), чтобы запросы были отброшены?
(ПРИМЕЧАНИЕ. Я провел некоторое эмпирическое тестирование на другой кодовой базе, в которой используются сокеты, и выяснилось, что существует буфер - если он действительно задуман, каков типичный размер этого буфера?)