ffmpeg中判断阻塞socket可读/可写的方法

ffmpeg中判断阻塞socket可读/可写的方法

// 判断socket fd是否可读/可写函数
int ff_network_wait_fd(int fd, int write)
{
    int ev = write ? POLLOUT : POLLIN;
    struct pollfd p = { .fd = fd, .events = ev, .revents = 0 };
    int ret;
    ret = poll(&p, 1, POLLING_TIME /*100,毫秒单位*/);
    return ret < 0 ? ff_neterrno() : p.revents & (ev | POLLERR | POLLHUP) ? 0 : AVERROR(EAGAIN);
}
// 带有超时的判断socket fd是否可读/可写函数
int ff_network_wait_fd_timeout(int fd, int write, int64_t timeout, AVIOInterruptCB *int_cb)
{
    int ret;
    int64_t wait_start = 0;

    while (1) {
        if (ff_check_interrupt(int_cb)) // 判断用户是否需要主动中断
            return AVERROR_EXIT;
        ret = ff_network_wait_fd(fd, write);
        if (ret != AVERROR(EAGAIN)) // 不是继续等待,则表示要么成功,要么因为其他错误失败
            return ret;
        if (timeout > 0) {
            if (!wait_start)
                wait_start = av_gettime_relative();
            else if (av_gettime_relative() - wait_start > timeout) // 超时退出
                return AVERROR(ETIMEDOUT);
        }
    }
}

你可能感兴趣的:(代码搜集)