это в основном 1-к-1 из вызовов POSIX c, и поэтому я включаю ссылки на справочные страницы, чтобы вы могли прочитать их объяснение и соответствующий код c:
socket создает конечную точку связи с помощью файлового дескриптора в пространстве имен указанного семейства адресов, но не назначает ни адрес, ни порт.
bind назначает адрес и портк указанному сокету - порт, который может быть выбран случайным образом, если вы запрашиваете порт, для которого у вас нет прав доступа.(например, <1024 для пользователя без полномочий root) </p>
listen делает конкретный сокет и, следовательно, адрес и порт пассивным, что означает, что он будет принимать входящие соединения с вызовом accept.Чтобы обрабатывать несколько соединений одно за другим, вы должны указать журнал ожидания, содержащий их, а соединения, которые приходят, когда вы обрабатываете одно, добавляются.Как только резерв будет заполнен, система ответит таким образом на эти системы с помощью подхода, который заставляет их переподключаться, удерживая SYN, удерживая ответ ACK и т. Д. вам гораздо лучше.
accept затем создает новый не слушающий сокет, связанный с новым файловым дескриптором, который вы затем используете для связи с указанной соединяющейся стороной.accept также работает в качестве директора для вашего потока выполнения, эффективно блокируя дальнейший прогресс до тех пор, пока соединение не станет фактически доступным в очереди для его принятия, как спин-блокировка.Единственный способ обойти это - объявить неблокирование сокета, и в этом случае он немедленно вернется с ошибкой.