首页 > 试题广场 >

在IO复用模型的关键是熟练掌握select函数,该函数的原

[问答题]
在I/O复用模型的关键是熟练掌握select函数,该函数的原型是
int select(int maxfd, fd_set *readset, fd_set *writeset, fd_set *exceptset, 
    const struct timeval *timeout);
a)请详细解释select函数的参数的意义,以及执行结果。
b)如何利用select函数构造一个最简单的多协议服务器,同时提供TCP和UDP服务?画出进程结构图。
maxfd参数是所以监视的描述字中最大的描述字加1。中间三个参数分别表示监视的不同条件的描述字集合。其中readset为读描述字集合,writeset为写描述字集合,execptset为异常描述字集合。Timeout参数为select函数最长睡眠时间。
Select函数有三种执行情况:
永远等待下去:仅在有一个或以上描述字准备好i/o才返回,为此,我们将timeout设置为空指针。
等待固定时间:在有一个描述字准备好时返回,但不超过由timeout参数指定的秒数和微秒数。
根本不等待,检查描述字后立即返回,这称为轮询。这种情况下,timeout必须指向结构timeval,且定时器的值必须为0。
Select函数的返回值如下:
如果在指定超时值到达之前有一个或多个描述字满足条件,则函数返回值大于零;
如果超时时间到时,没有描述字满足条件,函数返回值为0;
如果select函数阻塞过程中,发生错误,函数返回值为-1;
多协议服务器可以由一个执行线程构成,该线程既可以在TCP也可以在UDP上使用异步IO来处理通信。服务器最初打开两个套接字,一个使用无连接的传输,一个使用面向连接的传输,使用异步IO等待两个套接字之一就绪。
发表于 2017-05-07 20:03:45 回复(0)