我正在使用如下方式设置 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/