Что меня смущает, так это то, что, учитывая двунаправленность сокетов, почему я не могу просто открыть 1 сокет с socket() на клиенте и один на сервере и позволить им общаться через этот единственный сокет?

В каком случае мне понадобится пара сокетов?

1
Anastasios Andronidis 5 Окт 2020 в 21:29

2 ответа

Лучший ответ

Итак, каков общий вариант использования, когда мне понадобится пара сокетов?

Обычно требуется двунаправленная связь между родительским и дочерним процессом (или иногда между потоками одного процесса).

Это похоже на двунаправленный эквивалент pipe и позволяет избежать раскрытия пути AF_UNIX или любого другого общедоступного адреса для чего-то внутреннего по отношению к вашей программе.

Здесь есть рабочий пример здесь.

3
Useless 5 Окт 2020 в 19:24

socketpair создает два сокета, которые уже подключены друг к другу. Типичным вариантом использования является связь между родительским и дочерним процессом: родительский процесс создает пару сокетов, разветвляет дочерний процесс, а затем дочерний и родительский процессы могут связываться друг с другом через свой конец пары сокетов.

2
Steffen Ullrich 5 Окт 2020 в 18:54