Что это значит, что accept () создает новый сокет? - PullRequest
0 голосов
/ 07 июня 2018

Мой вопрос основан на следующем понимании

  • Сокет определяется портом ip :.И у сервера, и у клиента будет свой сокет
  • Сокетное соединение определяется пятью наборами: server_ip, server_port, client_ip, client_port, protocol
  • Дескриптор сокета является целочисленным значением, которое идентифицирует сокет

Я попытался реализовать свой собственный сервер, где socket () и accept () возвращают разные значения дескриптора сокета (всегда ли это так?).Мой вопрос заключается в том, почему сказано, что accept () создает новый сокет, если на сервере не открыт новый порт, а ip: port одинаков для дескрипторов сокетов, возвращаемых socket () и accept ().Если новый сокет создается методом accept (), чем он отличается от сокета, созданного socket ()?

1 Ответ

0 голосов
/ 07 июня 2018
  1. Я пытался реализовать свой собственный сервер, где socket () и accept () возвращали разные значения дескриптора сокета (всегда ли это так?).

Да.

Мой вопрос: почему говорят, что accept () создает новый сокет, если на сервере не открыт новый порт, а ip: port одинаков для обоих дескрипторов сокетов, возвращаемых socket () и accept().Если новый сокет создается методом accept (), чем он отличается от сокета, созданного функцией socket ()?

Поскольку первоначальный сокет используется для ожидания связи, в то время как второйиспользуется для общения.Вызов socket (+ bind + listen) подготовит конечную точку связи, известную как сокет , для приема входящих вызовов.Вызов accept в хорошо подготовленной точке связи ожидает входящего вызова, и когда это происходит, создается канал связи (2 конечных точки + протокол), представленный подключенным сокетом , возвращаемымcall.

C API может сбить вас с толку, потому что оба называются сокетом, но на самом деле не для одного и того же использования.В некоторых других языках / API проводится дифференциация.Например, в Java у вас есть ServerSocket, который используется для ожидания входящих вызовов, и Socket, которые используются для связи.

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