使用 select 子例程示例

本节说明如何使用 select 子例程示例。

带有 select 子例程的 svc_run 例程的代码如下所示:

void
svc_run()
{
    fd_set readfds;
    int dtbsz = getdtablesize();

    for (;;) {
        readfds = svc_fds;
        switch (select(dtbsz, &readfds, NULL,NULL,NULL)) {

        case -1:
            if (errno == EINTR)
                continue;
            perror("select");
            return;
        case 0:
            break;
        default:
            svc_getreqset(&readfds);
        }
    }
}

RPC 服务器可以使用的打开文件描述符的最大数目已设置为 32767 ,以便与在 AIX®的较早发行版上构建的 RPC 服务器应用程序保持兼容。 需要在 FD_SETSIZE 设置为 32767 或更大的情况下编译传递到 svc_getreqset 子例程的 fd_set 类型。 传入较小的 fd_set 变量可能导致传递的缓冲区被 svc_getreqset 子例程过度运行。