Как сбросить сокет назад к блокирующемуся режиму (после того, как я установил его на не блокирующийся режим)?

Я считал этот относительно установки сокета к не блокирующемуся режиму.

http://www.gnu.org/software/libc/manual/html_mono/libc.html#File-Status-Flags

Вот то, что я сделал:

static void setnonblocking(int sock)
{
    int opts;

    opts = fcntl(sock,F_GETFL);
    if (opts < 0) {
        perror("fcntl(F_GETFL)");
        exit(EXIT_FAILURE);
    }
    opts = (opts | O_NONBLOCK);
    if (fcntl(sock,F_SETFL,opts) < 0) {
        perror("fcntl(F_SETFL)");
        exit(EXIT_FAILURE);
    }
    return;
}

Как я могу задержать сокет к режиму Blocking? Я не вижу флаг O_BLOCK?

Спасибо.

14
задан user 28 February 2014 в 02:59
поделиться

2 ответа

Вы пытались очистить флаг O_NONBLOCK?

opts = opts & (~O_NONBLOCK)
16
ответ дан 1 December 2019 в 12:38
поделиться
121 --- 46677992-

Альтернативный способ очистить флаг:

opts ^= O_NONBLOCK;

Это Переключите неблокирующий флаг, то есть отключите неблокирующие, если в данный момент включен.

0
ответ дан 1 December 2019 в 12:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: