select()返回0,但实际上是有数据过来的。
FD_ZERO(&recv_mask); FD_SET(sock, &recv_mask); timeout.tv_sec = time_out; //设置超时s timeout.tv_usec = 0; ret = select(sock+1, &recv_mask, NULL, NULL, &timeout);// 老是select 不到数据,其实是有数据过来了。 if (ret < 0) //出错 { printf("\nselect()<0: Error!\n"); return -1; //未知错误 } if (ret == 0) //如果超时,再读一次 { ret = select(sock+1, &recv_mask, NULL, NULL, &timeout); while(ret == 0) { ret = select(sock+1, &recv_mask, NULL, NULL, &timeout); } } else { 处理正确数据。 }