这是使用select.t的tcp和udp echoclient服务器的代码片段
有一个很好的清晰度,但是在选择它时已经在书中进行了描述,即在下面的代码片段中,我们应该采用(maxpl + 2)我没有得到它,首先为什么我们要采用max(tcp_sfd,udp_sfd)?

 fd_set fdvar;
 FD_ZERO(&fdvar);
 FD_SET(tcp_sfd,&fdvar);
 FD_SET(udp_sfd,&fdvar);
 int maxpl = max(tcp_sfd,udp_sfd);
 cout << "Waiting for a client...\n";

 if(select(maxpl+2 ,&fdvar,NULL,NULL,NULL)==-1)
 {
      perror("error in select");
  }
 if(FD_ISSET(udp_sfd,&fdvar))
 {
      // UDP
  }
  else
  {
      //TCP
  }

最佳答案

关于此处显示的代码,尽管使用maxpl+2是无害的,但maxpl+1是错误的,它应该是maxpl+2

select需要其1.自变量大于您在任一fd_set中具有的最大文件描述符的tne值的1。 -因为那是select文档必须说明的内容。

10-04 13:27