В каждом примере и обсуждении, которое я просматриваю в контексте программирования сокетов 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
.