gpt4 book ai didi

c - UDP 接收超时选项 linux c

转载 作者:太空宇宙 更新时间:2023-11-04 08:44:46 25 4
gpt4 key购买 nike

我正在使用如下方式设置 UDP 接收超时选项:

    struct timeval t;
t.tv_sec = 0;
t.tv_usec = 5;

if(setsockopt(destination_fd, SOL_SOCKET, SO_RCVTIMEO, &t, sizeof(t)) == -1){
perror("Setting SO_RCVTIMEO option in UDP socket for destination RX: ");
print_error_and_exit("Couldn't set SO_RCVTIMEO option in UDP socket for destination RX");
}

我想将 UDP 接收超时设置为 5 微秒,但这不起作用。

当没有接收到数据包时,UDP 至少需要 4 毫秒才能超时,即使我设置了 5 微秒也是如此。

如果没有可用数据包,我如何在 5 微秒内超时。

我猜可能是进程进入了阻塞状态,而调度器调度了其他进程,所以总是需要大约 4 毫秒。如果是这样,如果没有数据可接收,我如何调用 recvfrom() 以接收 UDP 数据包失败而不阻塞?

最佳答案

5 微秒是一个非常小的持续时间,您需要更多时间才能切换到内核来处理您的 recv 系统调用。 4 毫秒虽然对我来说听起来有点长。

您可以做的最快的事情是根本不设置超时,使用 select 检查套接字是否有待处理的数据包。

关于c - UDP 接收超时选项 linux c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22120380/

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