在C中使用select实现UDP套接字

时间:2013-03-23 21:09:36

标签: c sockets

我在C中实现了一个套接字编程项目。我正在使用select()来等待来自客户端的数据。我有两个UDP套接字,select()总是忽略我的一个套接字。

有人可以简单描述我应该从哪里开始寻找它吗?这就是我的服务器正在做的事情

waitThreshold.tv_sec = 5000; 
waitThreshold.tv_usec = 50; 
if (sd > sd1)
    max_sd = (sd + 1);
else if(sd1 > sd)   
    max_sd = (sd1 + 1);
FD_ZERO(&read_sds); 
FD_SET(sd, &read_sds); 
FD_SET(sd1, &read_sds);   

ret = select(max_sd, &read_sds, NULL, NULL, &waitThreshold); 
if (ret < 0) {
    printf("\nSelect thrown an exception\n");   
    return 0;
} else if (FD_ISSET(sd, &read_sds)) { 
    // code for socket one 
} else if (FD_ISSET(sd1, &read_sds)) {
    // code for socket two 
}

1 个答案:

答案 0 :(得分:2)

每次迭代后必须设置并重置

if(sd > sd1)    
      max_sd = (sd + 1);
else if(sd1 > sd)   
      max_sd = (sd1 + 1);
//some code
while(1){
   waitThreshold.tv_sec = 5000; 
   waitThreshold.tv_usec = 50;    
   FD_ZERO(&read_sds); 
   FD_SET(sd, &read_sds); 
   FD_SET(sd1, &read_sds);
   ret = select(max_sd, &read_sds, NULL, NULL, &waitThreshold); 
   if(ret <0)
   { 
     printf("\nSelect thrown an exception\n");   
     return 0;
   } 
   else if(FD_ISSET(sd, &read_sds)) 
    { // code for socket one }  
   else if(FD_ISSET(sd1, &read_sds)) 
   { // code for socket two }</pre></code>
}

现在它将解决您的问题。