Когда мы запускаем серверное приложение, нам всегда нужно указывать номер порта, который оно слушает. Но как этот «механизм прослушивания» реализован под капотом?
Мое текущее воображение выглядит следующим образом:
Операционная система связывает номер порта с некоторым буфером. Ответственность серверного приложения - следить за этим буфером. Если в этом буфере нет данных, операция прослушивания серверного приложения просто заблокирует приложение.
Когда какие-то данные поступят по сети, операционная система узнает об этом, а затем проверит данные и увидит, нацелены ли они на этот номер порта. И затем он заполнит соответствующий буфер . И тогда ОС уведомит заблокированное серверное приложение, и серверное приложение получит данные и продолжит работу.
Вопрос:
Если описанный выше сценарий верен, как может операционная система узнать есть данные, поступающие по сети? Это не может быть занятый опрос. Это какой-то механизм, основанный на прерываниях?
Если прибывает слишком много данных, а буфер недостаточно велик, будет ли потеря данных?
Действительно ли операция "прослушивание порта" является операцией блокировки?
Большое спасибо.