Сокет отправки с MSG_WAITALL получил 22 EINVAL - PullRequest
0 голосов
/ 09 февраля 2020
bool AbstractSocket::send(void *data, const size_t &size)
{
    ssize_t result = ::send(m_sfd, data, size, MSG_WAITALL);
    if (result == -1 ) {
        if (errno != EAGAIN) {
            LOG_ERR("failed to write socket")
            emitErrorSignal();
        } else { // else If errno == EAGAIN
            // that means we have read all data.
            return true;
        }
    } else if (result == 0) {
        // The remote has closed the connection
        LOG_WNG("the remote has closed the connection")
        emitErrorSignal(std::errc::connection_aborted);
    }
    return size == static_cast<size_t>(result);
}

Я пытаюсь создать функцию отправки с указанным размером, которая отправляет все данные. Почему ошибка send поднимает EINVAL? Какой аргумент неверен?

1 Ответ

2 голосов
/ 09 февраля 2020

Какой аргумент недопустим?

send функция не имеет опции MSG_WAITALL. Так что MSG_WAITALL недействительно.

send только поддержка:

  • MSG_EOR
  • MSG_OOB

https://linux.die.net/man/3/send

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...