我正在使用以下内容设置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微秒,但这不起作用。
当没有数据包接收时,即使我设置了5微秒,UDP也会花费至少4毫秒来超时。
如果没有可用数据包,如何在5微秒内超时。
我猜可能是进程被阻塞状态,而调度程序调度其他进程,因此总是花费大约4毫秒。如果是这样,如果没有数据要接收,如何调用recvfrom()接收UDP数据包失败而不阻塞?
答案 0 :(得分:2)
5微秒是一个超小的持续时间,你需要更多的时间来切换到内核来处理你的recv系统调用。 4毫秒但对我来说听起来有点长。
你可以做的最快就是没有设置超时,使用select检查套接字是否有待处理的数据包。