[英]select fd_set order by message time of arrival
我可以select
两个UDP套接字。 有时select
返回2,因此两个套接字都准备好接收,但是我想首先获取可用的最旧的消息。 有什么办法可以存档吗?
我需要首先获得的消息是:
t1 < t2 :所以我必须首先从套接字s1获得消息m1 。
现在我有类似的东西:
recived do_recive(fd_set* container, int nfds, int* sockets, unsigned n_sockets) {
// ...
int activity = select(nfds, container, NULL, NULL, NULL);
// ...
for(i=0;i<n_sockets;i++) {
if(FD_ISSET(sockets[i], container)) {
recvfrom(...);
break;
}
}
// ...
}
如果select返回2,则意味着从第一个数据包到达之时到第二个数据包到达之时,您的进程已被抢占(未准备好运行)。 因此,无法知道哪个先到达。 就您的过程而言,这两个数据包同时到达。
还要注意,网络中的路由器可以(并且确实)对包进行重新排序和延迟。 因此,即使您是从一台计算机先发送数据包A,然后又发送数据包B(之后又是第二秒),也无法保证数据包A会先于B到达。通常,如果您的代码取决于UDP数据包到达的顺序,则它只是在现实世界中行不通。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.