Я пытался реализовать свой собственный сервер, где socket () и accept () возвращали разные значения дескриптора сокета (всегда ли это так?).
Да.
Мой вопрос: почему говорят, что accept () создает новый сокет, если на сервере не открыт новый порт, а ip: port одинаков для обоих дескрипторов сокетов, возвращаемых socket () и accept().Если новый сокет создается методом accept (), чем он отличается от сокета, созданного функцией socket ()?
Поскольку первоначальный сокет используется для ожидания связи, в то время как второйиспользуется для общения.Вызов socket
(+ bind
+ listen
) подготовит конечную точку связи, известную как сокет , для приема входящих вызовов.Вызов accept
в хорошо подготовленной точке связи ожидает входящего вызова, и когда это происходит, создается канал связи (2 конечных точки + протокол), представленный подключенным сокетом , возвращаемымcall.
C API может сбить вас с толку, потому что оба называются сокетом, но на самом деле не для одного и того же использования.В некоторых других языках / API проводится дифференциация.Например, в Java у вас есть ServerSocket
, который используется для ожидания входящих вызовов, и Socket
, которые используются для связи.