gpt4 book ai didi

c - 按消息到达时间选择 fd_set order

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:03 24 4
gpt4 key购买 nike

我在两个 UDP 套接字上有一个 select。有时 select 返回 2,因此两个套接字都已准备好接收,但我想首先接收可读取的最旧消息。有什么方法可以存档吗?

我需要首先获取最先到达的消息:

  • 消息 m1 在时间 t1 到达套接字 s1
  • 消息 m2 在时间 t2 到达套接字 s2

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 数据包到达的顺序,那么它只是在现实世界中行不通。

关于c - 按消息到达时间选择 fd_set order,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com