UDP接收超时选项linux c

时间:2014-03-01 21:07:08

标签: c linux udp

我正在使用以下内容设置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数据包失败而不阻塞?

1 个答案:

答案 0 :(得分:2)

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

你可以做的最快就是没有设置超时,使用select检查套接字是否有待处理的数据包。