In ogni esempio e discussione che ho incontrato nel contesto della programmazione di socket BSD, sembra che il modo consigliato per impostare un descrittore di file in modalità I / O non bloccante sia usare il O_NONBLOCK
flag su fcntl()
, ad es.
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
Faccio programmazione di rete in UNIX da oltre dieci anni e ho sempre utilizzato la FIONBIO ioctl()
chiamata per farlo:
int opt = 1;
ioctl(fd, FIONBIO, &opt);
Non ho mai pensato molto al perché. L'ho appena imparato in questo modo.
Qualcuno ha qualche commento sui possibili rispettivi meriti dell'uno o dell'altro? Immagino che il luogo della portabilità differisca in qualche modo, ma non so fino a che punto in quanto ioctl_list(2)
non parla di quell'aspetto dei ioctl
metodi individuali .