0

here is code snippet for tcp and udp echoclient server using select.i had done with poll and got a good clarity but when coming to select it had described in the book ie in the below code snippet we should take (maxpl+2) i did不明白,首先为什么我们要使用 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 
  }
4

2 回答 2

1

关于这里显示的代码,maxpl+2是错误的,应该是maxpl+1,虽然使用maxpl+2是无害的。

select需要它的 1. 参数比您在任何一个中的最大文件描述符的 tne 值大fd_set1。- 因为这就是 select 文档所说的必须是这样的。

于 2013-03-03T11:49:19.983 回答
0

从手册页:

nfds 参数指定要测试的描述符范围。应在每组中检查第一个 nfds 描述符;也就是说,应检查描述符集中从零到 nfds-1 的描述符。

select 的第一个参数应该是其中所有 fd 的最大值加一个。

于 2013-03-03T13:56:19.600 回答