2017-06-10 8 views

答えて

3

Windowsのselect()の実装はリンクされたリストを内部的に使用するため、何にでもnfdsパラメータを使用する必要はありません。

しかし、他のOSでは、fd_set構造体は、ビット配列(ソケットあたり1ビット)を保持するように実装されています。

typedef struct fd_set { 
    __int32_t fds_bits[__DARWIN_howmany(__DARWIN_FD_SETSIZE, __DARWIN_NFDBITS)]; 
} fd_set; 

...と正しいことを行うためには、select()の呼び出しがあります。たとえば、ここでのMacOS/Xの下で(SYS/_TYPES/_fd_def.hで)それが宣言されている方法です配列内のビットをループして、それらの内容を確認します。 nfdsパラメータでselect()を指定すると、すべての呼び出しで配列全体を常に反復処理する必要はなく、配列の最初の(nfds)ビットを反復処理するだけでよいことをselect()実装に伝えます。これにより、select()が他の方法より効率的になります。

関連する問題