безопасно ли одновременно recv () и send () на одном сокете?
Я помню, где-то читал, что сокет можно рассматривать как два независимых полудуплексных канала. Значит ли это, что recv()
и send()
одного и того же сокета на самом деле не имеют значения?
- если да, то по определению или конкретная реализация?
- если нет, то два мешают друг другу?
спасибо.
2 ответов
Мне любопытно, как вы думаете, они would мешать друг другу. Вы думаете, что можете получить то, что послали?
в случае SOCK_STREAM вы можете использовать send/recv одновременно.
Ex : Предположим, у вас есть два потока, один отвечает за отправку данных и второй отвечает за получение данных, которые вы можете сделать следующие
главная процедура : получить сокет fd. создайте поток POSIX для отправки буфера в этот fd. создайте поток POSIX для получения данных, полученных из этого fd. подключение к серверу.
Поток 1 Рутина : создать сообщение буфер; отправьте буфер в этот fd.
Поток 2 Рутина : recv данные из этого fd. обработайте дату.