безопасно ли одновременно выполнять recv () и send () в одном сокете? - PullRequest
7 голосов
/ 22 июля 2010

Я помню, что где-то читал, что сокет можно рассматривать как два независимых полудуплексных канала.Означает ли это, что recv() и send() одного и того же сокета на самом деле не имеют значения?

  • если так, это по определению или для конкретной реализации?
  • если нет, как они мешают друг другу?

спасибо.

Ответы [ 2 ]

1 голос
/ 27 марта 2015

В случае SOCK_STREAM вы можете использовать send / recv одновременно.

Пример: Предположим, у вас есть два потока, один отвечает за отправку данных а второй отвечает за получение данных, которые вы можете сделать, следуя инструкциям

основной режим: получить сокет фд. создать поток POSIX для отправки буфера на этот fd. создайте поток POSIX для получения данных, полученных с этого fd. подключиться к серверу.

Тема 1 Рутина: создать буфер сообщений; отправить буфер в этот фд.

Тема 2 Рутина: получить данные с этого фд. обработать дату.

1 голос
/ 22 июля 2010

Мне любопытно, как вы думаете, они будут мешать друг другу.Думаете ли вы, что можете получить то, что отправили?

...