私がBSDソケットプログラミングのコンテキストで遭遇するすべての例と議論では、ファイル記述子をノンブロッキングI / Oモードに設定するための推奨される方法は、O_NONBLOCK
フラグをfcntl()
に使用することです。
int flags = fcntl(fd, F_GETFL, 0);
fcntl(fd, F_SETFL, flags | O_NONBLOCK);
私はUNIXで10年以上ネットワークプログラミングを行っており、FIONBIO ioctl()
これを行うために常に呼び出しを使用しています。
int opt = 1;
ioctl(fd, FIONBIO, &opt);
その理由をあまり考えなかった。ちょうどそのようにそれを学びました。
誰かがどちらか一方の可能性のあるそれぞれの利点について解説をしていますか?移植性の軌跡は多少異なると思いますがioctl_list(2)
、個々のioctl
メソッドのその側面に触れていないので、どの程度かはわかりません。