один прием вызова для многопользовательских запросов - PullRequest
0 голосов
/ 14 мая 2019

Начнем с того, что я знаю, что есть способы обрабатывать множественные клиентские запросы путем разветвления или многопоточности. Но я не могу понять, почему не может быть многократного принятия сервером без разветвления или многопоточности. вызов accept () может просто принять весь процесс, желающий подключиться к нему. Почему вызов (accept ()) не может продолжаться, если клиент не разорвал соединение?

сервер выполняет socket (), listen () и bind () с блокировкой (по умолчанию)

клиент делает так же по умолчанию socket () и connect ()

То, что я считаю возвращаемым значением accept, будет для недавнего ребенка. Но на самом деле он блокируется, пока предыдущий клиент (-ы) не разорвал соединение.

1 Ответ

0 голосов
/ 15 мая 2019

Интересно, есть ли дескриптор файла, который возвращается перезаписью accept ()?Если нет, то как?

Нет перезаписи ;accept() создает новый подключенный сокет и возвращает новый дескриптор файла, ссылающийся на этот сокет - каждый раз новый, отдельный.Конечно, сервер, который управляет всеми клиентскими подключениями без создания других потоков, должен хранить все эти файловые дескрипторы, например, в массиве.

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