【发布时间】:2014-03-01 21:07:08
【问题描述】:
我正在使用类似这样的方式设置 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 数据包失败而不阻塞?
【问题讨论】: