W każdym przykładzie i dyskusji, na którą natknąłem się w kontekście programowania gniazd BSD, wydaje się, że zalecanym sposobem ustawienia deskryptora pliku na nieblokujący tryb I / O jest użycie O_NONBLOCK
flagi fcntl()
np.
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
Od ponad dziesięciu lat zajmuję się programowaniem sieciowym w systemie UNIX i zawsze używałem tego FIONBIO ioctl()
wywołania:
int opt = 1;
ioctl(fd, FIONBIO, &opt);
Nigdy tak naprawdę nie zastanawiałem się, dlaczego. Właśnie się tego nauczyłem.
Czy ktoś ma jakieś uwagi na temat możliwych zalet jednej lub drugiej? Wyobrażam sobie, że miejsce przenoszenia różni się nieco, ale nie wiem w jakim stopniu, ponieważ ioctl_list(2)
nie dotyczy tego aspektu poszczególnych ioctl
metod.