select

[機能]

  fd_set 構造体に設定された内容に基づき,複数のディスクリプタから,監視対象とするディスクリプタを設定します.その結果として,準備ができているディスクリプタの個数,タイムアウトなら 0,エラーならば -1 を返します.

  fd_set 構造体に値を設定したり,その状態を見るためには,fd_set 型変数を定義し,以下に示すマクロを利用することによって簡単に行うことができます.
void FD_ZERO(fd_set *fdset);   // fdset 中のすべてのビットをクリアする
void FD_SET(int fd, fd_set *fdset);   // fdset 中の fd のビットをセットする
void FD_CLR(int fd, fd_set *fdset);   // fdset 中の fd のビットをクリアする
void FD_ISSET(int fd, fd_set *fdset);   // fdset 中の fd のビットはセットされているか?		
[形式]
#include <sys/select.h>
#include <sys/time.h>

int select(int max, fd_set *readset, fd_set *writeset, fd_set *exset,
           const struct timeval *timeout)
	max : 検査するディスクリプタ番号の最大値
	readset : readset で指定されたディスクリプタに対して,読むことが可能か
	          否かをチェックし,結果を同じ変数 readset に返す.チェックを
	          必要としない場合は,ヌルポインタ( NULL )とすることができる.
	          これらは,writeset や exset においても同様である.
	writeset : 書き込めるか否か
	exset : 例外が発生したか否か
	timeout : ディスクリプタが準備できる時間に対する待ち時間の設定
				struct timeval {
					long tv_sec;   // 秒
					long tv_usec;   // マイクロ秒
				};		
[参照]

socket, bind, listen, connect, accept, gethostbyname, gethostbyaddr

菅沼ホーム 本文目次 演習問題解答例 付録目次 索引