这是使用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文档必须说明的内容。