В каждом примере и обсуждении, с которыми я сталкиваюсь в контексте программирования сокетов BSD, кажется, что рекомендуемый способ установить дескриптор файла в неблокирующий режим ввода-вывода - использовать этот O_NONBLOCK
флаг fcntl()
, например,
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
Я занимаюсь сетевым программированием в UNIX более десяти лет и всегда использовал для этого FIONBIO ioctl()
вызов:
int opt = 1;
ioctl(fd, FIONBIO, &opt);
Никогда особо не задумывался, почему. Просто так научился.
Есть ли у кого-нибудь комментарии относительно возможных достоинств того или другого? Я предполагаю, что локус переносимости несколько отличается, но не знаю, в какой степени, поскольку ioctl_list(2)
не относится к этому аспекту отдельных ioctl
методов.