Это архив сайта coldflame.by.ru, он не обновлялся с 2007 года. Мой современный сайт тут: http://leonid.shevtsov.me.
Домой! Обо мне Специально для РИ-06-1 Разнообразное... барахло, короче :) Программы и прочее Статьи и переводы Блог SmartDaemon
Предыдущая ОглавлениеСледующая

fcntl()

Управляет дескрипторами сокетов

Прототип

#include <sys/unistd.h>
#include <sys/fcntl.h>

int fcntl(int s, int cmd, long arg);

Описание

Вообще-то эта функция относится к файловым операциям, но у нее есть также пара сокето-ориентированных применений.

Параметр s - дескриптор нужного сокета, cmd должна быть F_SETFL, а arg может быть одной из следующих команд. (Учти, что fcntl() имеет больше команд, но здесь мы рассматриваем сокеты.)

O_NONBLOCK

Сделать сокет неблокирующим. Смотри раздел о блокировании.

O_ASYNC

Сделать сокет асинхронным. Когда в сокет приходят данные, передается сигнал SIGIO. Это редко используется, и выходит за рамки этого руководства. И, кажется, это доступно не на всех системах.

Возвращаемое значение

Возвращает ноль при успехе, -1 при ошибке, сохраняя ее номер в errno.

На самом деле разные применения fcntl() возвращают разные значения, но я их не рассматриваю, так как они не относятся к сокетам. Подсмотри fcntl() в справке.

Пример

int s = socket(PF_INET, SOCK_STREAM, 0);

fcntl(s, F_SETFL, O_NONBLOCK);  // сделать неблокирующим
fcntl(s, F_SETFL, O_ASYNC);     // сделать асинхронным

См. также

Блокирование, send()


Предыдущая ОглавлениеСледующая