безопасно ли одновременно recv () и send () на одном сокете?

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

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

спасибо.

2 ответов


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


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

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

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

Поток 1 Рутина : создать сообщение буфер; отправьте буфер в этот fd.

Поток 2 Рутина : recv данные из этого fd. обработайте дату.