Испытывает провал APR

Я использую libapr, но некоторые из их основных примитивов, похоже, работают не очень хорошо, демонстрируя очень странное поведение. Вот код, который я пишу:

    pr_pool_t *mp=NULL;
    apr_file_t *fp = NULL;
    apr_pollset_t *pollset=NULL;
    apr_pollfd_t file_fd;

    /*apr initialization*/
    CuAssertIntEquals(ct,0,apr_initialize());
    CuAssertIntEquals(ct,0,apr_pool_create(&mp,NULL));

    /*opens file to test poll*/
    CuAssertIntEquals(ct,0,apr_file_open(&fp, FILENAME,
            APR_FOPEN_WRITE | APR_FOPEN_CREATE | APR_FOPEN_READ,
            APR_FPROT_UREAD|APR_FPROT_UWRITE|APR_FPROT_UEXECUTE , mp));

    /*creates pollset*/
    CuAssertIntEquals(ct,0,apr_pollset_create(&pollset, 10,mp,0));

    /*prepares poll fd...*/
    file_fd.desc_type = APR_POLL_FILE;
    file_fd.reqevents = APR_POLLIN|APR_POLLOUT;
    file_fd.desc.f = fp;
    file_fd.client_data = fp;

    /*adds pollfd to pollset*/
    CuAssertIntEquals(ct,0,apr_pollset_add(pollset, &file_fd));

Все работает хорошо, пока я не доберусь до apr_pollset_add(pollset, &file_fd), где произойдет сбой и вернет значение 1.

Если вы проанализируете исходный код этой функции, вы обнаружите, что она никогда не вернет 1. Фактически 1 возвращается как системная ошибка, которая с помощью подпрограммы libapr apr_sterror переводится в: "операция не разрешена".

Я почти не спал и не ел, пытаясь решить эту проблему, но безуспешно. Мне действительно нужно использовать эту библиотеку.

Любая помощь будет оценена.

1 ответ

Я нашел проблему.

Я опрашивал обычный файл. Обычный файл всегда готов для чтения или записи.

1 соответствует недопустимой операции, которая устанавливается при вызове poll_ctl.

Другие вопросы по тегам