Предыдущая | Оглавление | Следующая |
Управляет дескрипторами сокетов
#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); // сделать асинхронным |
Предыдущая | Оглавление | Следующая |