使用 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 子例程过度运行。